#3520. 乔斯2024 CSP-J 初赛模拟赛(七)

乔斯2024 CSP-J 初赛模拟赛(七)

一、单选题(共 15 题,每题 2 分,共计 30 分)

  1. ⽂件型病毒传染的主要对象是()

{{ select(1) }}

  • ⽂本⽂件
  • 可执⾏⽂件
  • 系统⽂件
  • .EXE 和 .COM ⽂件
  1. 字母在计算机中是以编码形式表示的,通用的编码是 ASCII 码,字母 “A” 的 ASCII 码是65,字母 E 的 ASCII 码是 ( )。

{{ select(2) }}

  • 69
  • 68
  • 05
  • 52
  1. 两个十进制数(1111)10(1111)_{10}(1010)10(1010)_{10}的异或运算结果用十进制表示是()

{{ select(3) }}

  • 5
  • 3
  • 101
  • 1957

4.⽤某种排序⽅法对线性表25, 84, 21, 47, 15, 27, 68, 35, 20进⾏排序,结点变化如下: (1) 25,84,21,47,15,27,68,35,20;

(2) 20,15,21,25,47,27,68,35,84;

(3) 15,20,21,25,35,27,47,68,84;

(4) 15,20,21,25,27,35,47,68,84 。

那么,排序⽅法是( )

{{ select(4) }}

  • 希尔排序
  • 快速排序
  • 选择排序
  • 归并排序

5.以下关于 CSP 非专业级认证与 NOIP 竞赛关系的说法最恰当的是( )。 {{ select(5) }}

  • 完全无关
  • 组织者相同
  • 举办目标相同
  • 从属关系,CSP 从属于 NOIP

6.⼀棵完全⼆叉树,共有1234个节点,其叶⼦结点的个数为 ( ) {{ select(6) }}

  • 616
  • 615
  • 617
  • 210

7.Linux下可执⾏⽂件的默认扩展名为( )

{{ select(7) }}

  • exe
  • chm
  • dll
  • 都不是

8.二叉树T,已知其先根遍历是 1 2 4 3 5 7 6 (数字为结点的编号,以下同),中根遍 历是 2 4 1 5 7 3 6 ,则该二叉树的后根遍历是( )。 {{ select(8) }}

  • 4 2 5 7 6 3 1
  • 7 4 2 5 6 3 1
  • 4 2 7 5 6 3 1
  • 4 2 7 6 5 3 1

9.2021年7月1日是星期四,我们热烈庆贺了中国共产党成立一百周年,完成了两个一百 年中的第一个。我们将在 2049年10月1日欢庆建国一百年,这一天是星期几? ()。 {{ select(9) }}

  • 星期四
  • 星期五
  • 星期六
  • 星期日

10.八进制数(15264)8(15264)_8转换成的二进制数是()。

{{ select(10) }}

  • (001101010110100)2(001101010110100)_2
  • (101101011010101)2(101101011010101)_2
  • (001011000110100)2(001011000110100)_2
  • (001101010100110)2(001101010100110)_2

11.逻辑表达式( )的值与变量 的真假⽆关。

{{ select(11) }}

  • (A ∧ B) ∨ (¬A ∧ B)
  • (A ∨ B) ∧ ¬A
  • (A ∨ B) ∧ ¬B
  • (A ∨ B) ∧ ¬A ∧ B

12.以下关于图的不正确说法是( )。

{{ select(12) }}

  • 任意一个图一定有偶数个奇点
  • 所有顶点的度数之和等于边数的2倍
  • 所有顶点的度数之和不一定等于边数的2倍
  • 在有向图中顶点的入度之和等于出度之和

13.设变量 x 为 float 型且已赋值,则以下语句中能将 x 中的数值保留到⼩数点后两位,并将第 三位四舍五⼊的是( )。

{{ select(13) }}

  • x = (x / 100 + 0.5) * 100.0;
  • x = (int)(x * 100 + 0.5) / 100.0;
  • x = (x * 100 + 0.5) / 100.0;
  • x = (x * 100) + 0.5 / 100.0;

14.前缀表达式 + 3 * 2 + 5 12 的值是( )

{{ select(14) }}

  • 37
  • 65
  • 23
  • 25

15.下列关于CPU存取速度的⽐较中,正确的是 ( )

{{ select(15) }}

  • Cache > 内存 > 寄存器
  • Cache > 寄存器 > 内存
  • 寄存器 > Cache > 内存
  • 寄存器 > 内存 > Cache

二.阅读程序​(程序输⼊不超过数组或字符串定义的范围;其中 判断题1.5分,第5题分别为3,3,4分,第6题分别为4,4,4分,共 计40分)

#include<iostream>

#include<cstdio>

using namespace std; 

int daytab [2][13] = { 

	{0, 31, 28, 31, 30,31, 30,31, 31, 30,31, 30,31 }, 

{0, 31, 29,31, 30,31, 30,31, 31, 30,31, 30,31 } 

}; 

bool IsLeapYear(int year) 

{ 

return (year % 4 ==0 && year % 100 != 0) || (year % 400 == 0); 

} 

int main() { 

int year, month, day; 

scanf("%d %d %d", &year, &month, &day);
int number = 0; 

int row = IsLeapYear(year); 

for(int j = 0; j < month; ++j){ 

number += daytab[row][j]; 

} 

number += day; 

printf("%d\n", number); 

return 0; 

}

判断题

1).输入的三个数中,第二个数应是 [0, 11] 上的整数,否则会出现数组越界的问题。()

{{ select(16) }}

  • ×

2).输入 1900 3 2 和输入 2000 3 1 ,输出结果是相同的。()

{{ select(17) }}

  • ×

3).将第 9 行改成 return (year - 2000) % 4 == 0 ,其他地方不做改动,对程序最终的输 出结果没有影响。()

{{ select(18) }}

  • ×

4).将第 9 行改成如下四行语句:

if(year % 400 == 0) return 1; if(year % 100 == 0) return 0;

if(year % 4 == 0) return 1;

return 0;

其他地方不做改动,对程序最终的输出结果没有影响。()

{{ select(19) }}

  • ×

单选题

5)若输入的三个数为 1990 9 20 ,则输出为( )

{{ select(20) }}

  • 253
  • 263
  • 273
  • 283

6).若输入的三个数为 2000 5 1 ,则输出为( )

{{ select(21) }}

  • 122
  • 123
  • 124
  • 125
#include<bits/stdc++.h>

using namespace std; 

const int Maxn = 10005; 

int n, b[Maxn]; 


inline void mergesort(int * a, int l, int r) {
if (l == r) return; 

int mid = l + r >> 1; 

mergesort(a, 1, mid), mergesort(a, mid + 1, r); 

int i = l, j = mid + 1, cnt = 0; 

while (i <= mid && j <= r) { 

if (a[i] <= a[j]) b[++cnt] = a[i++]; 

else b[++cnt] = a[j++]; 

} 

while (i <= mid) b[++cnt] = a[i++]; 

while (j <= r) b[++cnt] = a[j++]; 

for (i = l; i <= r; i++) a[i] = b[i - l + 1]; 

} 

int a[Maxn]; 

int main(void) { 

cin >> n; 

for (int i = 1; i <= n; i++) cin >> a[i]; 

mergesort(a, 1, n); 

for (int i = 1; i <= n; i++) cout << a[i] << (i == n ? '\n' : ' '); 

return 0; 

}

判断题

1).该算法中 int *a 没有传值。( ) {{ select(22) }}

  • ×

2).该算法会的输出换⾏。( ) {{ select(23) }}

  • ×

3).该算法中 mergesort 函数时间复杂度为O(nlogn)。 {{ select(24) }}

  • ×

4).如果输⼊为 5 4 3 9 7 8 则输出为 3 4 7 8 9 \n 。( ) {{ select(25) }}

  • ×

单选题

5).该算法的最劣复杂度与哪个排序算法相同( ) {{ select(26) }}

  • 快速排序
  • 选择排序
  • 计数排序
  • 堆排序

6)下⾯哪句与 i==n?'\n':' ' 相同( ) {{ select(27) }}

  • i!=1?'\n':' '
  • 若 i == n ,则 '\n'
  • 若 i!=n ,则 '\n'
  • ' '
#include<bits/stdc++.h>
using namespace std; 

int t, x[100], a[100]; 

void work(int d, int i, int n) { 

int k; if (n == 1) { 

for (k = 0; k < d; k++) printf("%3d", a[k]); 

printf("\n"); 

} else 

for (k = i; k < t; k++) 

if (n % x[k] == 0) { 

a[d] = x[k]; 

work(d + 1, k, n / x[k]); 

} 

} 

int main() { 

int i, k, n; cin >> n; 

for (i = n; i > 1; i--) 

if (n % i == 0) x[t++] = i; 

work(0, 0, n); 

}

判断题

1).for (int i = n; i > 1; i--) if (n % i == 0) x[t++] = i; 的作用是求出 n 的所 有因数。( ) {{ select(28) }}

  • ×

2).该程序的作用是对 n 进行质因数分解。( ) {{ select(29) }}

  • ×

3).printf("%3d" ,a[k]); 中去掉 3 对程序没有影响。( ) {{ select(30) }}

  • ×

4).去掉 if(n%x[k]==0) 对程序有影响。( )

{{ select(31) }}

  • ×

单选题

5).如果输入为 2 ,那么输出为。( )

{{ select(32) }}

  • 2
  • 2 1
  • 1 2
  • 2 2

6).如果输入为 72 ,那么输出有多少非空行。()

{{ select(33) }}

  • 14
  • 15
  • 16
  • 17

三、完善程序(单选题,每题 3 分,共计 30 分)

(1)田忌赛马,田忌每赢一次齐王的马就得200金币,当然输了就扣200金币,平局则金币数不变。

#include<bits/stdc++.h> 

using namespace std; 

int main() { 

int n; 

while (cin >> n && n != 0) { 

int tj[1001], king[1001], count = 0; 

int tj_min = 0, tj_max = n - 1; 

int king_min = 0, king_max = n - 1; 

for (int i = 0; i < n; i++) cin >> tj[i]; 

for (int i = 0; i < n; i++) cin >> king[i]; 

sort(tj, tj + n); 

sort(king, king + n); 

while (n--) { 

if (tj[(1)] > king[(2)]) { 

count++; 

tj_max--; 

king_max--; 

} else if (tj[(3)] < king[(4)]) {
count--; 

tj_min++; 

king_max--; 

} else { 

if (tj[tj_min] > king[king_min]) { 

count++; 
_(5)_; 
_(6)_; 

} else { 

if (_(7)_) 

count--; 

tj_min++; 
_(8)_; 

} 

} 

} 

cout << count * 200 << endl; 

} 

return 0; 

}

1).(1) 和 (2) 处填( )

{{ select(34) }}

  • tj_max 和 king_max
  • tj_min 和 king_max
  • tj_min 和 king_min
  • tj_max 和 king_min

2).(3) 和 (4) 处填( ) {{ select(35) }}

  • tj_min 和 king_max
  • tj_max 和 king_max
  • tj_min 和 king_min
  • tj_max 和 king_min

3).(5) 和 (6) 处填( ) {{ select(36) }}

  • tj_min++ 和 king_min++
  • tj_max++ 和 king_min++
  • tj_min-- 和 king_min++
  • tj_max++ 和 king_min—

4).(7) 处填( )。 {{ select(37) }}

  • tj[tj_min] < king[king_max]
  • tj[tj_min] > king[king_min]
  • tj[tj_min] > king[king_max]
  • tj[tj_max] < king[king_max]

5).(8) 处填( ) {{ select(38) }}

  • king_min++
  • king_max—
  • king_min—`
  • king_max++

2.给出一堆长度各异的木棍,这些木棍能否头尾相连形成一个正方形? 输入:

第一行包含一个整数N,为数据组数。接下来N行,每行第一个数M代表木棍的数量,第2至M + 1个数为每个木棍的长度。

输出: 对每组数据,输出 yes 或 no 表示这组木棍是否能拼成正方形。

样例输入

3

4 1 1 1 1

5 10 20 30 40 50

8 1 7 2 6 4 4 3 5

样例输出

yes

no

yes

#include<iostream>

#include<algorithm>

#include<cstdio>

#include<cstring>

using namespace std;
const int MAXN = 25; 

int side; 

int m; 

int sticks[MAXN]; 

bool visit[MAXN]; 

bool DFS(int sum, int number, int position) { 

if(_(1)_){ 

return true; 

} 

int sample = 0; 

for (int i = position; i < m; ++i) { 

if (visit[i] || sum + sticks[i] > side || _(2)_ ) { 

continue; 

} 

visit[i] = true; 

if (_(3)_) { 

if (DFS(0, number + 1, 0)) { 

return true; 

} else { 

sample = sticks[i]; 

} 

} else {
if (DFS(sum + sticks[i], number, i + 1)) { 

return true; 

} else { 

sample = sticks[i]; 

} 

} 

visit[i] = false; 

} 

return false; 

} 

bool compares(int x,int y) { 

return x > y; 

} 

int main() { 

int n; 

scanf("%d", &n); 

while (n--) { 

int length = 0 

scanf("%d", & m); 

for(int i = 0; i < m; i++){ 

scanf ("%d", &sticks[i]); 

length += sticks[i] ;
} 

memset(visit, false, sizeof(visit)); 

if(length % 4 != 0){ 

printf("no\n"); 

continue; 

} 

side = length / 4; 

sort(sticks, sticks + m, Compare); 

if(_(4)_){ 

printf("no\n"); 

continue; 

} 

if(_(5)_){ 

printf("yes\n"); 

} else { 

printf("no\n"); 

} 

} 

return 0;

}

1).(1) 处应填()。 {{ select(39) }}

  • number == 0
  • number == 1
  • number == 2
  • number == 3

2).(2) 处应填()。 {{ select(40) }}

  • sticks[i] < sample
  • sticks[i] == sample
  • sticks[i] > sample
  • sticks[i] != sample

3).(3)处应填()。 {{ select(41) }}

  • sum + sticks[i] < side
  • sum + sticks[i] == side
  • sum + sticks[i] > side
  • sum + sticks[i] != side

4).(4) 处应填()。

{{ select(42) }}

  • sticks[0] < side
  • sticks[0] == side
  • sticks[0] > side
  • sticks[0] != side

5).(5) 处应填()。

{{ select(43) }}

  • DFS(0, 0 ,1)
  • DFS(0, 0, m)
  • DFS(0, 0, m)
  • DFS(length/4,0,0)