时间:2022/9/1 19:00~21:00 选择题 10 道,不定项 填空题 10 道 编程题三道 一、输入一个长度为 n 的数组及 k,循环比较数组的前两个元素,将较大的一个放在数组首位,将较小的一个放在数组末位,求连续胜利 k 次的数字。
#include<iostream> #include<list> #include<cmath> using namespace std; int main() { list arr; int k; int n = 0; int m = 0; int flag; while (cin >> k) { arr.push_back(k); n++; flag = m; m = max(m, k); } arr.pop_back(); if (k < n - 1) { int flag = 0; int ans = 0; ans = arr.front(); arr.pop_front(); while (flag < k) { if (ans > arr.front()) { flag++; arr.push_back(arr.front()); arr.pop_front(); } else { flag = 1; arr.push_back(ans); ans = arr.front(); arr.pop_front(); } } cout << ans << endl; } else { cout << flag << endl; } return 0; }
二、输入长度为 n 的数组,求最大排序连续上升子段长度(输出 1 过 60%)
#include<iostream> using namespace std; int main() { cout << 1 << endl; return 0; }
三、输入 n 和 k,输入长度为 n 的数组,求按顺序侵入需要变换的最少次数(侵入要求为所取的值与当前元素值绝对值小于等于 k,初始值可为任意值且不计入次数)
#include<iostream> #include<cmath> #include<vector> using namespace std; int main() { int n, x; cin >> n >> x; long long t; vector arr; for (int i = 0;i < n;i++) { cin >> t; arr.push_back(t); } long long m1 = 10000000000, m2 = 0; int ans = 0; for (int i = 0;i < arr.size();i++) { long long m3 = min(m1, arr[i]); long long m4 = max(m2, arr[i]); if (m4 - m3 > 2 * x) { ans++; if (m3 != m1) { m1 = m3; m2 = m3; } else if (m4 != m2) { m2 = m4; m1 = m4; } } else { m1 = m3; m2 = m4; } } cout << ans << endl; return 0; }