爱奇艺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++##笔试题目#