#x1011. 小高组基础知识题目
小高组基础知识题目
一、单项选择(共 15 题,每题 2 分,共计 30 分,每题有且仅有一个正确选项)
-
计算机的核心部件是什么()?
{{ select(1) }}
- 显示器
- 键盘
- 中央处理器(CPU)
- 鼠标
- 将十进制小数 9.375 转换为二进制小数,其正确的二进制表示是() {{ select(2) }}
- 1001.11
- 1011.11
- 1001.011
- 1011.011
- 假设有一个内存显示为 96MB 的文件夹,里面存储的都是分辨率为 1024 × 2048 的24 位图像,请问理论上存储了( )张图像?(不考虑图像技术压缩对内存的优化) {{ select(3) }}
- 16 张
- 20 张
- 8 张
- 32 张
- 有六个小朋友并排站一列,其中三个小朋友是三胞胎,如果要求这三个三胞胎必须相邻,则有( )种不同排列方法? {{ select(4) }}
- 72
- 48
- 144
- 218
- 在 C++中,关于函数参数传递的说法,哪一个是正确的( )? {{ select(5) }}
- C++只支持值传递。
- C++只支持引用传递。
- C++既支持值传递也支持引用传递。
- C++只支持指针传递。
- 对于一个 8 位二进制整数,如果其原码是 10000011,则其补码是( ) {{ select(6) }}
- 01111100
- 01111101
- 11111100
- 11111101
- 用简单插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是( ) {{ select(7) }}
- A. 93, 32, 95, 13, 23, 15, 88, 37
- B. 62, 88, 37, 29, 39, 34, 72, 24
- C. 86, 76, 68, 26, 53, 12, 35, 59
- D. 21, 33, 47, 40, 80, 68, 90, 99
- 在 C++ 的 STL 中,如果你需要频繁地在序列的任意位置插入和删除元素,以下哪个容器将是最合适的选择()? {{ select(8) }}
- std::vector
- std::queue
- std::stack
- std::list
- 已知一棵二叉树的前序遍历结果为 ABCDEF,中序遍历结果为 CBAEDF,则后序遍历的结果为( )。 {{ select(9) }}
- CBEFDA
- FEDCBA
- CBEDFA
- EDCBFA
- C++中用于表示枚举类型的关键字是( )。 {{ select(10) }}
- struct
- union
- enum
- static
- 有以下代码段: int a[3] = {1, 3, 5}; int *p = &a[0]; int *q = p + 2; cout << *(p+1) << “ ” << *q; 执行改代码输出的结果为( ) {{ select(11) }}
- 2 3
- 2 4
- 3 4
- 3 5
- 根据下面的流程图计算,若一开始输入的 m 与 n 的值分别为 10710 和 8208,则最后的输出是( )。 {{ select(12) }}
- 8
- 18
- 90
- 306
- 班级组织大家参加信息学比赛,现在要从班里选出 3 人组成一队进行报名,要求每个参赛队伍至少需要有一位女同学。已知班级里一共有 15 个男生,9 个女生,则一共有( )种可能的组合。
{{ select(13) }}
- 1569
- 2024
- 1940
- 1485
- 一家电信公司提供了多种流量套餐供用户选择,每种套餐有不同的流量上限和价格,并可以重复购买。用户可以根据自己的需求购买套餐,超出套餐的流量将按照更高的单价计费。假设有以下套餐和超出套餐的流量单价: 套餐 A:2GB 流量,价格 3 元 套餐 B:5GB 流量,价格 7 元 套餐 C:10GB 流量,价格 13 元 超出套餐流量单价:2 元/GB 现有用户预计需要使用 128GB 的流量,则该用户最少需要付费( )元? {{ select(14) }}
- 169
- 168
- 167
- 166
- 向一个栈顶指针为 h 的带头结点的链栈中插入指针 p 所指的结点,应执行( ) {{ select(15) }}
- h->next = p;
- p->next = h;
- p->next = h; p->next = p;
- p->next = h->next; h->next = p;
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填√,错误填×;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分)
第一题
1 #include<iostream>
2 using namespace std;
3 int x,y,n,m;
4 int a[1000];
5 string num="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
6 void change(int i,int j){
7 a[i]^=a[j];
8 a[j]^=a[i];
9 a[i]^=a[j];
10 }
11 int main (){
12 cin >> x >> y;
13 m=(1<<y)-1;
14 while(x!=0){
15 n++;
16 a[n]=(x&m);
17 x=(x>>y);
18 }
19 for(int i=1;i<=n/2;i++){
20 change(i,n-i+1);
21 }
22 for(int i=1;i<=n;i++){
23 cout << num[a[i]];
24 }
25 return 0;
26 }
判断题
- 将第 4 行接在第 10 行之后,程序会出现编译错误。() {{ select(16) }}
- 正确
- 错误
- 输入的 y 绝对值在 1000 以内,程序都能正确运行。() {{ select(17) }}
- 正确
- 错误
- 将程序第 20 行换成change(n-i+1,i);不会影响程序结果。() {{ select(18) }}
- 正确
- 错误
- 输入 371 输出结果长度大于 5。(2 分)() {{ select(19) }}
- 正确
- 错误
选择题
- 输入 373,输出的结果为() {{ select(20) }}
- 45
- 54
- 0100101
- 1010010
- 输入 335 4,输出的结果为() {{ select(21) }}
- 14H
- EH
- 14F
- 1415
第二题
1 #include<iostream>
2 using namespace std;
3 int n,m,Max;
4 int a[1000][1000];
5 int Minn(int x,int y,int z){
6 int res=x;
7 if(res>y) res=y;
8 if(res>z) res=z;
9 return res;
10 }
11 int Square(int x,int y){
12 if(x==1) return a[x][y];
13 if(y==1) return a[x][y];
14 int res=a[x][y]+Minn(Square(x-1,y),Square(x,y-1),Square(x-1,y-1));
15 Max=max(Max,res);
16 if(a[x][y]==0) res=0;
17 return res;
18 }
19 int main (){
20 cin >> n >> m;
21 for(int i=1;i<=n;i++){
22 for(int j=1;j<=m;j++){
23 cin >> a[i][j];
24 }
25 }
26 Square(n,m);
27 cout << Max;
28 return 0;
29 }
判断题
- 删除 16 行,程序运行结果不会受到任何影响。() {{ select(22) }}
- 正确
- 错误
- 调用函数 Minn(52,97,63),Minn 函数返回的结果为 97。() {{ select(23) }}
- 正确
- 错误
- 输入 0 0,会导致程序运行无法正常结束。() {{ select(24) }}
- 正确
- 错误
选择题
- 输入
3 3
1 1 1
1 1 1
1 1 1
输出的结果为() {{ select(25) }}
- 2
- 3
- 6
- 9
- 输入
4 5
1 0 1 0 1
1 1 1 0 1
1 1 0 1 1
1 1 1 0 1
输出的结果为() {{ select(26) }}
- 20
- 15
- 4
- 2
- 程序的时间复杂度为() {{ select(27) }}
- O(mn)
- O(mlogn)
- O(n^m)
- O(3^(m+n))
第三题
1 #include<iostream>
2 using namespace std;
3 int fun_1(int x,int y){
4 long long res = 0,t = 1;
5 while(t<=x/y){
6 res++;
7 t*=y;
8 }
9 return res;
10 }
11 int fun_2(int y){
12 long long l=0,r=y,mid;
13 while(l<r){
14 mid = (l+r+1)/2;
15 if(mid>y/mid){
16 r = mid-1;
17 }
18 else{
19 l = mid;
20 }
21 }
22 return l;
23 }
24 int main(){
25 int a,b;
26 cin >> a >> b;
27 cout << fun_1( a , b ) << " ";
28 cout << fun_1( fun_2(a) , b );
29 return 0;
30 }
假设输入的 x,y 都是大于 1,且不超过 10^6的正整数 判断题 28. 若输入为“63 2”,那么输出的第一个数字为 5() {{ select(28) }}
- 正确
- 错误
- 若将第 22 的 l 改为 mid,那么程序结果一定会变() {{ select(29) }}
- 正确
- 错误
- 若输入的 a 为 b^4(2<=b<=200),那么输出的第一行一定是第二行的两倍 (2 分) {{ select(30) }}
- 正确
- 错误
选择题 31. 若输入为“1024 4”,那么输出结果为() {{ select(31) }}
- 4 2
- 5 2
- 6 3
- 4 3
- 若输入为“282 3”,那么输出结果为()
{{ select(32) }}
- 4 2
- 5 2
- 5 3
- 4 3
- fun_1()和 fun_2()的时间复杂度分别为 {{ select(33) }}
三、完善程序(单选题,每小题 3 分,共计 30 分)
1、(统计个数) 给出 n 个数,统计每个数能看到的数字个数。 例如:2 5 1 3 4 第一个数字 2 可以看到:5,因为 5 将 1,3,4 挡住了,一共 1 个 第二个数字 5 可以看到:2,1,3,4 一共 4 个 第三个数字 1 可以看到:5,3,4,因为 5 将 2 挡住了,一共 3 个 第四个数字 3 可以看到:1,5,4,因为 5 将 2 挡住了,一共 3 个 第五个数字 4 可以看到:3,5,因为 3 将 1 挡住了,5 将 2 挡住了,一共 2 个
01 #include<iostream>
02 using namespace std;
03 int a[100];
04 int b[100];
05 int now;
06 int main() {
07 int n;
08 cin >> n;
09 for (int i = 0; i < n; i++) {
10 cin >> a[i];
11 }
12 for (int i = 0; i < n; i++) {
13 now = ①;
14 if(i==0 || i==n-1) b[i]=1;
15 else b[i] = ②;
16 for (int j = ③; j >= 0; j--) {
17 if (a[j] > now) {
18 now = a[j];
19 b[i]++;
20 }
21 }
22 now = ④;
23 for (int j = ⑤; j < n; j++) {
24 if (a[j] > now) {
25 now = a[j];
26 b[i]++;
27 }
28 }
29 }
30 for (int i = 0; i < n; i++) {
31 cout << b[i] << " ";
32 }
33 return 0;
34 }
- ①处应填()。 {{ select(34) }}
- a[i - 1]
- a[i]
- C. a[i + 1]
- D. a[i] + 1
- ②处应填()。 {{ select(35) }}
- 0
- 1
- 2
- -1
- ④处应填()。 {{ select(36) }}
- i-1
- i-2
- i+1
- i+2
- ④处应填()。 {{ select(37) }}
- a[i - 1]
- a[i]
- a[i + 1]
- a[i] + 1
- ⑤处应填()。 {{ select(38) }}
- i-1
- i-2
- i+1
- i+2
2、(n 的 n 次方之和) 计算1^1 + 2^2 + 3^3 + … + n^n 的高精度值。(1 ≤ n≤ 20)
试补全该程序。
01 #include<iostream>
02 #include<string.h>
03 using namespace std;
04 const int MAXN=250;
05 int n, t, i, j, k, la, lb, x[10], a[MAXN], b[MAXN];
06 void f(int *a){
07 for(int i = 0; i < MAXN; i++){
08 if(a[i] >= 10){
09 a[i+1] += a[i] / 10;
10 a[i] %= 10;
11 }
12 }
13 }
14 int main(){
15 cin>>n;
16 ①;
17 for(i=2;i<= 9;i++){
18 t=1;
19 for(j=1;j<=i;j++){
20 t\*=i;
21 }
22 x[i]=t;
23 }
24 for(i=2;i<=9;i++)
25 ②;
26 if(!(n/10))
27 cout << x[n];
28 else{
29 for(k=i;k<=n;k++){
30 memset(a,0,sizeof(a));
31 t=k,la=0;
32 while(t){
33 a[la++]=t%10;
34 t/=10;
35 }
36 for(i=2;i<=k;i++){
37 for(j=0;j<la;j++)
38 a[j]*=k;
39 ③;
40 t=MAXN;
41 while(!a[t])
42 t--;
43 la=t + 1;
44 }
45 for(i=0;i<la;i++)
46 b[i]+=a[i];
47 f(b);
48 lb = ④;
49 if(b[lb])
50 lb++;
51 }
52 t=⑤, i=0;
53 while(t){
54 b[i]+=t%10;
55 t/=10;
56 i++;
57 }
58 f(b);
59 for(i=lb-1;i>=0;i--)
60 cout << b[i];
61 }
62 return 0;
63 }
- ①处应填()。 {{ select(39) }}
- x[1] = 1
- x[0] = 1
- a[0] = 1
- a[1] = 1
- ②处应填()。 {{ select(40) }}
- x[i-1]+=x[i]
- x[i+1]+=x[i]
- x[i]+=x[i-1]
- x[i]+=x[i+1]
-
③处应填()。
{{ select(41) }}
- la+=1
- la+=n
- f(b)
- f(a)
- ④处应填()。 {{ select(42) }}
- min(lb,la)
- max(lb,la)
- lb*n
- lb+n
-
⑤处应填()。
{{ select(43) }}
- x[10]
- x[9]
- x[0]
- x[1]