#x1011. 小高组基础知识题目

小高组基础知识题目

一、单项选择(共 15 题,每题 2 分,共计 30 分,每题有且仅有一个正确选项)

  1. 计算机的核心部件是什么()?

    {{ select(1) }}

  • 显示器
  • 键盘
  • 中央处理器(CPU)
  • 鼠标
  1. 将十进制小数 9.375 转换为二进制小数,其正确的二进制表示是() {{ select(2) }}
  • 1001.11
  • 1011.11
  • 1001.011
  • 1011.011
  1. 假设有一个内存显示为 96MB 的文件夹,里面存储的都是分辨率为 1024 × 2048 的24 位图像,请问理论上存储了( )张图像?(不考虑图像技术压缩对内存的优化) {{ select(3) }}
  • 16 张
  • 20 张
  • 8 张
  • 32 张
  1. 有六个小朋友并排站一列,其中三个小朋友是三胞胎,如果要求这三个三胞胎必须相邻,则有( )种不同排列方法? {{ select(4) }}
  • 72
  • 48
  • 144
  • 218
  1. 在 C++中,关于函数参数传递的说法,哪一个是正确的( )? {{ select(5) }}
  • C++只支持值传递。
  • C++只支持引用传递。
  • C++既支持值传递也支持引用传递。
  • C++只支持指针传递。
  1. 对于一个 8 位二进制整数,如果其原码是 10000011,则其补码是( ) {{ select(6) }}
  • 01111100
  • 01111101
  • 11111100
  • 11111101
  1. 用简单插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是( ) {{ 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
  1. 在 C++ 的 STL 中,如果你需要频繁地在序列的任意位置插入和删除元素,以下哪个容器将是最合适的选择()? {{ select(8) }}
  • std::vector
  • std::queue
  • std::stack
  • std::list
  1. 已知一棵二叉树的前序遍历结果为 ABCDEF,中序遍历结果为 CBAEDF,则后序遍历的结果为( )。 {{ select(9) }}
  • CBEFDA
  • FEDCBA
  • CBEDFA
  • EDCBFA
  1. C++中用于表示枚举类型的关键字是( )。 {{ select(10) }}
  • struct
  • union
  • enum
  • static
  1. 有以下代码段: 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
  1. 根据下面的流程图计算,若一开始输入的 m 与 n 的值分别为 10710 和 8208,则最后的输出是( )。 image {{ select(12) }}
  • 8
  • 18
  • 90
  • 306
  1. 班级组织大家参加信息学比赛,现在要从班里选出 3 人组成一队进行报名,要求每个参赛队伍至少需要有一位女同学。已知班级里一共有 15 个男生,9 个女生,则一共有( )种可能的组合。

{{ select(13) }}

  • 1569
  • 2024
  • 1940
  • 1485
  1. 一家电信公司提供了多种流量套餐供用户选择,每种套餐有不同的流量上限和价格,并可以重复购买。用户可以根据自己的需求购买套餐,超出套餐的流量将按照更高的单价计费。假设有以下套餐和超出套餐的流量单价: 套餐 A:2GB 流量,价格 3 元 套餐 B:5GB 流量,价格 7 元 套餐 C:10GB 流量,价格 13 元 超出套餐流量单价:2 元/GB 现有用户预计需要使用 128GB 的流量,则该用户最少需要付费( )元? {{ select(14) }}
  • 169
  • 168
  • 167
  • 166
  1. 向一个栈顶指针为 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 }

判断题

  1. 将第 4 行接在第 10 行之后,程序会出现编译错误。() {{ select(16) }}
  • 正确
  • 错误
  1. 输入的 y 绝对值在 1000 以内,程序都能正确运行。() {{ select(17) }}
  • 正确
  • 错误
  1. 将程序第 20 行换成change(n-i+1,i);不会影响程序结果。() {{ select(18) }}
  • 正确
  • 错误
  1. 输入 371 输出结果长度大于 5。(2 分)() {{ select(19) }}
  • 正确
  • 错误

选择题

  1. 输入 373,输出的结果为() {{ select(20) }}
  • 45
  • 54
  • 0100101
  • 1010010
  1. 输入 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 }

判断题

  1. 删除 16 行,程序运行结果不会受到任何影响。() {{ select(22) }}
  • 正确
  • 错误
  1. 调用函数 Minn(52,97,63),Minn 函数返回的结果为 97。() {{ select(23) }}
  • 正确
  • 错误
  1. 输入 0 0,会导致程序运行无法正常结束。() {{ select(24) }}
  • 正确
  • 错误

选择题

  1. 输入

3 3

1 1 1

1 1 1

1 1 1

输出的结果为() {{ select(25) }}

  • 2
  • 3
  • 6
  • 9
  1. 输入

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
  1. 程序的时间复杂度为() {{ 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) }}

  • 正确
  • 错误
  1. 若将第 22 的 l 改为 mid,那么程序结果一定会变() {{ select(29) }}
  • 正确
  • 错误
  1. 若输入的 a 为 b^4(2<=b<=200),那么输出的第一行一定是第二行的两倍 (2 分) {{ select(30) }}
  • 正确
  • 错误

选择题 31. 若输入为“1024 4”,那么输出结果为() {{ select(31) }}

  • 4 2
  • 5 2
  • 6 3
  • 4 3
  1. 若输入为“282 3”,那么输出结果为()

{{ select(32) }}

  • 4 2
  • 5 2
  • 5 3
  • 4 3
  1. fun_1()和 fun_2()的时间复杂度分别为 {{ select(33) }}
  • image
  • image
  • image
  • image

三、完善程序(单选题,每小题 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 }
  1. ①处应填()。 {{ select(34) }}
  • a[i - 1]
  • a[i]
  • C. a[i + 1]
  • D. a[i] + 1
  1. ②处应填()。 {{ select(35) }}
  • 0
  • 1
  • 2
  • -1
  1. ④处应填()。 {{ select(36) }}
  • i-1
  • i-2
  • i+1
  • i+2
  1. ④处应填()。 {{ select(37) }}
  • a[i - 1]
  • a[i]
  • a[i + 1]
  • a[i] + 1
  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 }
  1. ①处应填()。 {{ select(39) }}
  • x[1] = 1
  • x[0] = 1
  • a[0] = 1
  • a[1] = 1
  1. ②处应填()。 {{ select(40) }}
  • x[i-1]+=x[i]
  • x[i+1]+=x[i]
  • x[i]+=x[i-1]
  • x[i]+=x[i+1]
  1. ③处应填()。

    {{ select(41) }}

  • la+=1
  • la+=n
  • f(b)
  • f(a)
  1. ④处应填()。 {{ select(42) }}
  • min(lb,la)
  • max(lb,la)
  • lb*n
  • lb+n
  1. ⑤处应填()。

    {{ select(43) }}

  • x[10]
  • x[9]
  • x[0]
  • x[1]