#C1214. CSP-J 初赛模拟题3

CSP-J 初赛模拟题3

一、单项选择题

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

【第 1 题】

cout << 011 + 11; 的计算结果是( )。 {{ select(1) }}

  • 6
  • 14
  • 20
  • 22

【第 2 题】

如果 256 种颜色用二进制编码来表示,至少需要( )位。 {{ select(2) }}

  • 6
  • 7
  • 8
  • 9

【第 3 题】

在程序中用到的一个常数 2e-3 在内存中占( )空间。

{{ select(3) }}

  • 2B
  • 4B
  • 6B
  • 8B

【第 4 题】

char('A'+' '),当大写字母 'A' 的 ASCII 码和空格的 ASCII 码之和的结果是小写字母 'a' 的 ASCII 码,请问空格的 ASCII 码是( )。

{{ select(4) }}

  • 32
  • 33
  • 34
  • 35

【第 5 题】

二进制数 00101100 和 00010101 的和( )。 {{ select(5) }}

  • 00101000
  • 01000100
  • 01000001
  • 00111000

【第 6 题】

以下是 32 位机器和 64 位机器的区别是( )。 {{ select(6) }}

  • 显示器不同
  • 寻址空间不同
  • 硬盘大小不同
  • 输入法不同

【第 7 题】

以下关于字符串的判定语句中正确的是( )。 {{ select(7) }}

  • 串的长度必须大于零
  • 字符串不可以用数组来表示
  • 字符串是一种特殊的线性表
  • 空格字符组成的串就是空串

【第 8 题】

若有如下程序段,其中 s,a,b,c 均已定义为整型变量,且 a,c 均已赋值 (c 大于 0)。

s = a;
for (b = 1;b <= c; b++ )
	s = s + 1;

以下选项中和上述代码等价的是( )。

{{ select(8) }}

  • s = a + c;
  • s = a + b;
  • s = s + c;
  • s = b + c;

【第 9 题】

有以下程序:

#include <iostream>
using namespace std;
int main()
{
    int k = 4, n = 0;
    while (n < k)
    {
        n++;
        if (n % 3 != 0)
            continue;
        k--;
    }
    cout << k << "," << n << endl;
    return 0;
}

程序运行后输出的结果是( )。

{{ select(9) }}

  • 2,2
  • 2,3
  • 3,2
  • 3,3

【第 10 题】

给定含有 n 个不同的数的数组 L=<x1,x2,...,xn>L=<x_1,x_2,...,x_n>。如果 L 中存在 xi(1<i<n)x_i(1<i<n) 使得 x1<x2<...<xi1<xi>xi+1>...>xnx_1<x_2<...<x_{i-1}<x_i>x_{i+1}>...>x_n,则称 L 是单峰的,并称 xix_i 是 L 的“峰顶”。现在已知 L 是单峰的,请把 a-c 三行代码补全到算法中使得算法 正确找到 L 的峰顶。

a. Search(k+1, n) b. Search(1, k-1) c. return L[k]

Search(1, n)
1. k←⌊n/2⌋
2. if L[k] > L[k-1] and L[k] > L[k+1]
3. then __________
4. else if L[k] > L[k-1] and L[k] < L[k+1]
5. then __________
6. else __________

正确的填空顺序是( )。

{{ select(10) }}

  • c,a,b
  • c,b,a
  • a,b,c
  • b,a,c

【第 11 题】

100 以内质数个数为( )。 {{ select(11) }}

  • 22
  • 23
  • 24
  • 25

【第 12 题】

有 7 个一模一样的苹果,放到 3 个一样的盘子中,一共有( )种放法。 {{ select(12) }}

  • 7
  • 8
  • 21
  • 373^7

【第 13 题】

下列说法正确的是( )。 {{ select(13) }}

  • CPU 的主要任务是执行数据运算和程序控制
  • 存储器具有记忆能力,其中信息任何时候都不会丢失
  • 两个显示器屏幕尺寸相同,则它们的分辨率必定相同
  • 个人用户只能使用 Wifi 的方式连接到 Internet

【第 14 题】

FTP 可以用于( )。 {{ select(14) }}

  • 远程传输文件
  • 发送电子邮件
  • 浏览网页
  • 网上聊天

【第 15 题】

下列选项中不属于视频文件格式的是( )。 {{ select(15) }}

  • TXT
  • AVI
  • MOV
  • RMVB

二、阅读程序

(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ⨉ ;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分)

阅读程序(一)

1. #include <iostream>  
2. using namespace std; 
3. typedef long long LL;
4. LL normalPower(LL base, LL power){
5.     LL r = 1;
6.     for(int i = 1; i <= power; i++){
7.         r *= base;
8.         r %= 1000;
9.     }
10.     return r % 1000;
11. }
12. int main(){	
13.     LL m, n;
14.     while(true){
15.         cin >> m >> n;
16.         if(m == 0 && n == 0) break;
17.         cout << normalPower(m, n) << endl;
18.     }	
19. 	return 0;
20. }

判断题

  1. 输出的结果每一行都为三位数。 {{ select(16) }}
  • 正确
  • 错误
  1. 将第 6 行的 <= 改为 < 输出结果不变。 {{ select(17) }}
  • 正确
  • 错误
  1. 将 14 行的 true 改为 -1,则输出结果不变。 {{ select(18) }}
  • 正确
  • 错误

单选题

  1. 如果输入 2 12,则输出结果为( )。 {{ select(19) }}
  • 4
  • 96
  • 096
  • 4096
  1. 该程序时间复杂度为( )。 {{ select(20) }}
  • O(mn)O(mn)
  • O(n)O(n)
  • O(m)O(m)
  • O(mn)O(m^n)

阅读程序(二)

1. #include <iostream>  
2. using namespace std; 
3. 
4. int select_arr(int arr[], int len, int arr_value){
5.     while(1){
6.         int left = 0;
7.         int right = len - 1;
8.         while(left <= right){
9.              int mid = (left + right) / 2;
10.            int mid_value = arr[mid];
11.            if(mid_value == arr_value)
12.                 return mid;
13.            else if(mid_value > arr_value)
14.                right = mid - 1;
15.            else if(mid_value < arr_value)
16.                left = mid + 1;
17.        }
18.        return -1;
19.     }
20. }
21. 
22. int main(){	
23.     int arr[10] = {1, 3, 5, 7, 9, 10, 16, 46, 88, 91};
24.     int pos = select_arr(arr, 10, 16);
25.     cout << pos;
26.	    return 0;
27. }

判断题

21.数组 arr 的值可以为负数。 {{ select(21) }}

  • 正确
  • 错误
  1. 若 23 行代码为 int arr[10] = {1, 3, 7, 5, 9, 10, 16, 46, 88, 91}; 则输出结果没有变化。 {{ select(22) }}
  • 正确
  • 错误
  1. 数组数值越大,程序效率越低。 {{ select(23) }}
  • 正确
  • 错误
  1. 当数组数据量越大时,和顺序查找比较优势明显。 {{ select(24) }}
  • 正确
  • 错误

单选题

  1. 程序输出结果为( )。 {{ select(25) }}
  • 4
  • 5
  • 6
  • 7
  1. 该程序的算法为( )。 {{ select(26) }}
  • 顺序查找
  • 二分查找
  • 哈希查找
  • 分块查找

阅读程序(三)

1. #include <bits/stdc++.h>
2. using namespace std;
3.
4. int main() {
5.
6.	  string str;
7.	  char ch1, ch2;
8.	  getline(cin, str);
9.	  ch1 = ch2 = ' ';
10.	  for(int i = 0; i < str.size(); i++){
11.		if(ch1 < str[i]){
12.			ch2 = ch1;
13.			ch1 = str[i];
14.		}
15.		else if(ch2 < str[i])
16.			ch2 = str[i];
17.	  }
18.
19.	  if(isalpha(ch1))
20.		ch1 ^= ' ';
21.	  if(isdigit(ch2))
22.		ch2 = ch2 - '0' + 48;
23.	  cout << ch1 << ' ' << int(ch2);
24.	  return 0;
25. }

提示:空格 ASCII 码为 32。

判断题

  1. 若将第 8 行替换为 cin>>str; 则程序运行结果不会改变。

    {{ select(27) }}

  • 正确
  • 错误
  1. 若输入的字符串只包含大写字母,则输出 int(ch2) 一定小于 91。 {{ select(28) }}
  • 正确
  • 错误
  1. 若将第 20 行替换为 ch1 ^= 32; 则程序运行结果不变。 {{ select(29) }}
  • 正确
  • 错误
  1. 若输入 55555,程序运行结果输出为 5 5。 {{ select(30) }}
  • 正确
  • 错误

单选题

  1. 当输入为 654321 时,程序的输出结果为( )。 {{ select(31) }}
  • 6 5
  • 6 53
  • 1 2
  • 6 1
  1. 若输入只有 3 个数字型字符,输出为 3 50,则输入一共有多少种不同方案?( )。 {{ select(32) }}
  • 15
  • 24
  • 8
  • 32

三、完善程序

(单选题,每小题 3 分,共计 30 分)

完善程序(一)

使用快速幂算法求 xpx^p mod mm 的值。

#include<iostream>
using namespace std;
int x, p, m, i, result;
int main(){
	cin >> x >> p >> m;
	result = ①;
	while (②){
		if (p % 2 == 1)
			result = ③;
		p /= 2;
		x = ④;
	}
	cout << ⑤ << endl;
	return 0;
}
  1. ① 处应填( )。 {{ select(33) }}
  • 0
  • 1
  • x
  • p
  1. ② 处应填( )。 {{ select(34) }}
  • p
  • p >= 0
  • p != -1
  • p == 0
  1. ③ 处应填( )。 {{ select(35) }}
  • result * x
  • x * p % m
  • result * x % m
  • p * p % m
  1. ④ 处应填( )。 {{ select(36) }}
  • x * x % m
  • x * p % m
  • result * x % m
  • p * p % m
  1. ⑤ 处应填( )。 {{ select(37) }}
  • result * x ^ p % m
  • result * x % m
  • result * x
  • result

完善程序(二)

(郊游活动)有 n 名同学参加学校组织的郊游活动,已知学校给这 n 名同学的郊游总经费为 A 元,与此同时第 i 位同学自己携带了 MiM_i 元。为了方便郊游,活动地点提供 B(≥n) 辆自行车供人租用,租用第 j 辆自行车的价格为 CjC_j 元,每位同学可以使用自己携带的钱或者学校的郊游经费,为了方便账务管理,每位同学只能为自己租用自行车,且不会借钱给他人,他们想知道最多有多少位同学能够租用到自行车。 本题采用二分法。对于区间 [l,r] ,我们取中间点 mid 并判断租用到自行车的人数能否达到 mid。判断的过程是利用贪心算法实现的。

#include <iostream>
using namespace std;
#define MAXN 1000000

int n, B, A, M[MAXN], C[MAXN], l, r, ans, mid;

bool check(int nn) {
	int count = 0, i, j;
	i = ①;
	j = 1;
	while (i <= n) {
		if(②)
			count += C[j] - M[i];
		i++;
		j++;
	}
	return ③;
}
	
void sort(int a[], int l, int r) {
	int i = l, j = r, x = a[(l + r) / 2], y;
	while (i <= j) {
		while (a[i] < x) i++;
		while (a[j] > x) j--;
		if (i <= j) {
			y = a[i]; a[i] = a[j]; a[j] = y;
			i++; j--;
		}
	}
       if (i < r) sort(a, i, r);
       if (l < j) sort(a, l, j);
}

int main() {
	int i;
	cin >> n >> B >> A;
	for (i = 1; i <= n; i++)
		cin >> M[i];
	for (i = 1; i <= B; i++)
		cin >> C[i];
	sort(M, 1, n);
	sort(C, 1, B);
	l = 0;
	r = n;
	while (l <= r) {
		mid = (l + r) / 2;
		if(④){
            ans = mid;
			l = mid + 1;
		}else
			r = ⑤;
	}
	cout << ans << endl;
	return 0;
}
  1. ① 处应填( )。 {{ select(38) }}
  • n-nn+1
  • n-nn-1
  • n-nn
  • n-1
  1. ② 处应填( )。 {{ select(39) }}
  • M[i]>C[j]
  • M[i]<C[j]
  • M[i]
  • C[j]
  1. ③ 处应填( )。 {{ select(40) }}
  • count<=A
  • count<A
  • count>0
  • A>0
  1. ④ 处应填( )。 {{ select(41) }}
  • mid+1
  • check(mid)
  • mid-1
  • mid>0
  1. ⑤ 处应填( )。 {{ select(42) }}
  • mid+1
  • check(mid)
  • mid-1
  • mid>0

Statistics

Related

In following contests:

CSP-J 真题+模拟题