题型介绍与计算机基础 试卷分析
第一题
题目再现
下列不属于面向对象语言的是:A. C++ B. Java C. Rust D. Fortran
知识点熟练度不够,Fortran 为面向过程语言
阅读程序题
代码再现
#include <bits/stdc++.h>
using namespace std;
int main() {
string s; cin >> s;
int k; cin >> k;
while (s.length() > k) {
string tmp = "";
int n = s.length();
for (int i = 0; i < n; i += k) {
int val = 0;
for (int j = i; j < min(i + k, n); j ++) {
val += s[j] - '0';
}
tmp += to_string(val);
}
s = tmp;
}
cout << s << endl;
return 0;
}
// 题目中输入:11111222223 3
第十二题
判断:每一轮 while 循环中,字符串 s 的长度必然不断变小。(F)
见第十六题例子,第一个到第二个并没有长度减小
第十三题
判断:to_string 函数将一个正整数转化为了一个字符数组。(F)
概念:to_string
将 int
转化为 string
第十六题
本题的时间复杂度是:A. \(O(n)\) B. \(O(n^2)\) C. \(O(nk)\) D. \(O(n log n)\)
由题意可知,字符串如果是 "9999999999"
(\(10\) 个 \(9\)),那么变化过程为:
9999999999
1818181818
99999
18189
999
...
每次长度减少一半,那么 \(n+\cfrac{2}{n}+\cfrac{4}{n}+...=4n\)(无穷等比数列求和),所以时间复杂度 \(O(n)\)。