第一题
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
小红拿到了一个字符串,她发现这个字符串可能是她自己的名字"kou",于是想将其替换成小紫的名字"yukari"。你能帮帮她吗?
签到题很简单
c++版
#include
using namespace std;
int main(){
string s;
cin>>s;
cout<<((s=="kou")?"yukari":s);
}
java:
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String str = sc.next();
System.out.println(str.replace("kou","yukari"));
}
}
第二题:
小红拿到了一个正整数x,她想知道x有多少个不同的素因子,你能帮帮她吗?
这道题的要点在于读题:是要连续的几个因子,而不是所有的因子
c++:
void sol() {
cin >> n;
for(ll i = 2; i * i <= n; i++) {
if(n % i == 0) {
t++;
while(n % i == 0) n /= i;
}
}
if(n > 1) t++;
cout << t;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
sol();
return 0;
}
第三题:
小红的字符串中值
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
小红定义一个长度为奇数的字符串的“中值”为中间那个字符。例如"kou"的中值是'o'。
现在小红拿到了一个字符串,她想知道某个字符是多少个子串的中值。你能帮帮她吗?
思路:也就是一个字符算一个中值,以这个字符为对称轴,看他两边的字符最多有多少对称,也就是去最小值,两边字符的最小值
c++代码如下:
#include
using namespace std;
int main(){
int n;
cin>>n;
char t;
cin>>t;
string s;
cin>>s;
long long int i,sum=0;
for(i=0;i
第四题:
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
小红拿到了一个数组,初始数组为空,她希望你实现以下两种操作:
1. 输入1 x y,将x插入在元素y的右边。保证此时数组中没有元素等于x,且数组中存在一个y。特殊的,如果将x插入在数组的最左边,则y=0
2. 输入2 x,将元素x删除。
请你在所有操作后输出整个数组。
这道题看了个大佬的代码,果然思路决定一切
在步骤1中x,y的数量和x,y的插入也有关系,所以使用map这个数据结构来解决
c++代码如下:
int main() {
int Q;
cin >> Q;
map::iterator> m;
list q;
while(Q--) {
int op;
cin >> op;
if (op == 1) {
int x, y;
cin >> x >> y;
if (y == 0) {
q.pf(x);
m[x] = q.begin();
} else {
auto it = m[y];
q.insert(next(it), x);
m[x] = next(it);
}
} else {
int x;
cin >> x;
q.erase(m[x]);
m.erase(x);
}
}
printf("%d\n", q.size());
for (auto c: q) printf("%d ", c);
return 0;
}