一、选择
1.下列main()函数执行后的结果为()
A -1
B 0
C 1
D 2
for(int x = 0, y = 0; (y = 123) && (x < 4); x++);
#include <stdio.h>
int main(void)
{
printf("%s , %5.3s\n", "computer", "computer");
return 0;
}
int func() {
int i, j, k = 0;
for(i = 0, j = -1;j = 0;i++, j++) {
k++;
}
return k;
}
int main(){
cout << (func());
return 0;
}
C (错误)
正确答案: B
解析:因为j = 0为假,所以根本不进入循环,直接结束,那么j = 0。
2.fun(21)运行结果是()
A 10
B 5
C 3
D 8
int fun(int a) {
a^=(1<<5)-1;
return a;
}
C (错误)
正确答案: A
解析:这是一道位运算,我老是很抵触,然后将1左移五位,然后-1,相同为0,相异为1。
二、编程
1.牛牛组队问题
思路:取中间,就是个公式。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
vector <int> team;
int n = 0;
long long sum = 0; //注意这里是long long
cin >> n;
team.resize(3*n);
for(int i = 0; i < 3 * n; i++) {
cin >> team[i];
}
sort(team.begin(),team.end());
for(int i = 0; i < n; i++) {
sum += team[team.size()-(2*(i+1))];
}
cout << sum << endl;
}
2.删除公共字符
思路:哈希表映射,将s2出现的字符映射,如果hash[s1] == 0,证明s2中的字符没出现。
#include <iostream>
using namespace std;
int main(){
string s1, s2;
getline(cin, s1);
getline(cin, s2);
int hash[256] = {0};
for(int i = 0; i < s2.size(); i++) {
hash[s2[i]]++;
}
string ret;
for(int i = 0; i < s1.size(); i++) {
if(hash[s1[i]] == 0)
ret += s1[i];
}
cout << ret << endl;
return 0;
}