爱奇艺C++笔试代码
第三题是要笑死我……
第一题洗牌,用栈就可以解决,不过这破题目题干描述一点都不清楚,我照着用例测了半天才知道每一组牌都是往上叠……
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
int main() {
vector<int> inital(13, 0);
for(int i = 0; i < 13; i++) {
int tmp = 0;
cin >> tmp;
inital[i] = tmp;
}
int numbers = 0;
cin >> numbers;
vector<int> everycnt(numbers, 0);
for(int i = 0; i < numbers; i++) {
int tmp = 0;
cin >> tmp;
everycnt[i] = tmp;
}
vector<int> result = inital;
for(int i = 0; i < numbers; i++) {
stack<int> left;
stack<int> right;
for(int j = 0; j < everycnt[i]; j++)
left.push(result[j]);
for(int j = everycnt[i]; j < 13; j++)
right.push(result[j]);
int cnt = 12;
while(cnt >= 0) {
if(!left.empty()) {
result[cnt] = left.top();
left.pop();
cnt--;
}
if(!right.empty()) {
result[cnt] = right.top();
right.pop();
cnt--;
}
}
}
for(int i = 0; i < 12; i++) {
cout << result[i] << " ";
}
cout << result[12] << endl;
return 0;
}
第二题,直接排个序,最大值减去第二大的值,然后最小值和中间值的差除二,她俩做和即可, O(1),一开始还觉得这个方法可能不太对劲,然而毫无悬念的AC了:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> nums(3, 0);
for(int i = 0; i < 3; i++) {
cin >> nums[i];
}
sort(nums.begin(), nums.end());
int result = nums[2] - nums[1];
result += ((nums[1] - nums[0]) & 1) ? ((nums[1] - nums[0]) / 2 + 2) : (nums[1] - nums[0]) / 2;
cout << result << endl;
return 0;
}
第三题, 统计甜点心的数目,除以二就能AC,不骗你……
解法就暴力就行……不过我懒得做……
#实习##C/C++##笔试题目#