整理 NOI 初赛资料目录并标准化 CSP-J 模拟卷
- 将18套模拟卷分离为试题和答案解析,补齐并规范逐题解析 - 补充SVG图示,统一试题排版并导出打印PDF - 重整初赛专题训练与复习资料目录,清理旧版源文件
This commit is contained in:
1 parent
fe5c7ffd58
commit
0af92a68d9
216 files changed
+12743
-1272
No files matched your search
@@ -0,0 +1,336 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 06 套)</b></font></center>
|
||||
<center><font size="4"><b>入门级 C++ 语言试题</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)**
|
||||
|
||||
( ) 1. NOI 的中文意思是( )。
|
||||
A. 中国信息学联赛 B. 全国青少年信息学奥林匹克竞赛
|
||||
C. 中国青少年信息学奥林匹克竞赛 D. 中国计算机协会
|
||||
|
||||
( ) 2. 1TB代表的字节数是( )。
|
||||
A. 2的10次方 B. 2的20次方 C. 2的30次方 D. 2的40次方
|
||||
|
||||
( ) 3. 二进制数11 1011 1001 0111和01 0110 1110 1011进行逻辑与运算的结果是( )。
|
||||
A. 01 0010 1000 1011 B. 01 0010 1001 0011
|
||||
C. 01 0010 1000 0001 D. 01 0010 1000 0011
|
||||
|
||||
( ) 4. 如果根结点的深度记为1,则一棵恰有2011个叶结点的二叉树的深度最少是( )。
|
||||
A. 10 B. 11 C. 12 D. 13
|
||||
|
||||
( ) 5. 给定含有 n 个互不相同元素的单峰数组 L,满足先严格递增、后严格递减,峰顶位于数组内部。用下面的二分算法寻找峰顶,请将 a、b、c 三行代码依次填入空白处。正确的填空顺序是( )。
|
||||
|
||||
```text
|
||||
a. return Search(k + 1, r)
|
||||
b. return Search(l, k - 1)
|
||||
c. return L[k]
|
||||
|
||||
Search(l, r):
|
||||
if l == r then return L[l]
|
||||
k = floor((l + r) / 2)
|
||||
if L[k] > L[k - 1] and L[k] > L[k + 1]: ______
|
||||
else if L[k] < L[k + 1]: ______
|
||||
else: ______
|
||||
|
||||
调用 Search(2, n - 1)
|
||||
```
|
||||
|
||||
A. c,a,b B. c,b,a C. a,b,c D. b,a,c
|
||||
|
||||
( ) 6. 10 个三好学生名额分配到 7 个班级,每个班级至少有一个名额,一共有( )种不同的分配方案。
|
||||
A. 84 B. 72 C. 56 D. 504
|
||||
|
||||
( ) 7. 6 个顶点的连通图的最小生成树,其边数为( )。
|
||||
A. 6 B. 5 C. 7 D. 4
|
||||
|
||||
( ) 8. 设变量x为非负float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是( )。
|
||||
A. `x = (x * 100) + 0.5 / 100.0;` B. `x = (x * 100 + 0.5) / 100.0;`
|
||||
C. `x = (int)(x * 100 + 0.5)/100.0;` D. `x = (x / 100 + 0.5) * 100.0;`
|
||||
|
||||
( ) 9. 二进制数 00100100 和 00010100 的和是( )。
|
||||
A. 00101000 B. 01100111 C. 01000100 D. 00111000
|
||||
|
||||
( ) 10. 以下关于字符串的判定语句中正确的是( )。
|
||||
A. 字符串是一种特殊的线性表 B. 串的长度必须大于零
|
||||
C. 字符串不可以用数组来表示 D. 空格字符组成的串就是空串
|
||||
|
||||
( ) 11. ( )是一种先进先出的线性表。
|
||||
A. 栈 B. 队列 C. 哈希表(散列表) D. 二叉树
|
||||
|
||||
( ) 12. 设 $x=true,y=true,z=false$,以下逻辑运算表达式值为真的是( )。
|
||||
A. $(y\lor z)\wedge x\wedge z$ B. $x\wedge (z\lor y)\wedge z$ C. $(x\wedge y)\wedge z$ D. $(x\wedge y)\vee (z\vee x)$
|
||||
|
||||
( ) 13. 以下哪一种设备属于输出设备( )。
|
||||
A. 扫描仪 B. 键盘 C. 鼠标 D. 打印机
|
||||
|
||||
( ) 14. 在 Windows 资源管理器中,用鼠标右键单击一个文件时,会出现一个名为“复制”的操作选项,它的意思是( )。
|
||||
A. 用剪切板中的文件替换该文件
|
||||
B. 在该文件所在文件夹中,将该文件克隆一份
|
||||
C. 将该文件复制到剪切板,并保留原文件
|
||||
D. 将该文件复制到剪切板,并删除原文件
|
||||
|
||||
( ) 15. 甲、乙、丙三位同学选修课程,从 4 门课程中,甲选修 2 门,乙、丙各选修3门,则不同的选修方案共有( )种。
|
||||
A. 36 B. 48 C. 96 D. 192
|
||||
|
||||
---
|
||||
|
||||
#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 39.5 分,各小题分值见题目)**
|
||||
|
||||
**(1)**
|
||||
|
||||
```cpp
|
||||
1 #include<iostream>
|
||||
2 using namespace std;
|
||||
3 #define MAXN 20
|
||||
4 int gu[MAXN][MAXN];
|
||||
5 int luo(int n, int m) {
|
||||
6 if(n <= 1 || m < 2)
|
||||
7 return 1;
|
||||
8 if(gu[n][m] != -1)
|
||||
9 return gu[n][m];
|
||||
10 int ans=0;
|
||||
11 for(int i = 0; i <m; i += 2)
|
||||
12 ans+=luo(n-1, i);
|
||||
13 gu[n][m] = ans;
|
||||
14 return ans;
|
||||
15 }
|
||||
16 int main() {
|
||||
17 int n, m;
|
||||
18 cin >> n >> m;
|
||||
19 for(int i = 0; i < MAXN; i++)
|
||||
20 for(int j = 0; j < MAXN; j++)
|
||||
21 gu[i][j]= -1;
|
||||
22 cout << luo(n, m);
|
||||
23 return 0;
|
||||
24 }
|
||||
```
|
||||
|
||||
**判断题**
|
||||
|
||||
( ) 16. (1分) luo函数中,m的值不可能是奇数。( )
|
||||
|
||||
( ) 17. (1分) 若将第11行的“<”改为“<=”,程序的输出结果可能会改变。( )
|
||||
|
||||
( ) 18. (2分) 若将第8、9、13行删除,程序的运行的结果不变。( )
|
||||
|
||||
( ) 19. (2分) 在添加合适的头文件后,将第19到21行替换为"memset(gu, 255,sizeof(gu));"可以起到相同的作用。( )
|
||||
|
||||
**单选题**
|
||||
|
||||
( ) 20. (4分) 若输入数据为 4 8,则输出为( )。
|
||||
A. 7 B. 8 C. 15 D. 16
|
||||
|
||||
( ) 21. (3分) 最坏情况下,此程序的时间复杂度是( )。
|
||||
A. `O(m²n)` B. `O(nm!)` C. `O(n²)` D. `O(n²m)`
|
||||
|
||||
**(2)**
|
||||
|
||||
```cpp
|
||||
1 #include<iostream>
|
||||
2 using namespace std;
|
||||
3 int n,m,i,j,p,k;
|
||||
4 int a[100],b[100];
|
||||
5 int main()
|
||||
6 {
|
||||
7 cin>>n>>m;
|
||||
8 a[0]=n;i=0;p=0;k=1;
|
||||
9 do{
|
||||
10 for(j=0;j<i;j++)
|
||||
11 if(a[i]==a[j])
|
||||
12 {
|
||||
13 p=1;k=j;break;
|
||||
14 }
|
||||
15 if(p) break;
|
||||
16 b[i]=a[i]/m;
|
||||
17 a[i+1]=a[i]%m*10;
|
||||
18 i++;
|
||||
19 }while(a[i]!=0);
|
||||
20 cout<<b[0]<<".";
|
||||
21 for(j=1;j<k;j++) cout<<b[j];
|
||||
22 if(p) cout<<"(";
|
||||
23 for(j=k;j<i;j++) cout<<b[j];
|
||||
24 if(p) cout<<") ";
|
||||
25 cout<<endl;
|
||||
26 return 0;
|
||||
27 }
|
||||
```
|
||||
|
||||
**判断题**
|
||||
|
||||
( ) 22. (1.5分) 程序输入的n和m不能相等。( )
|
||||
|
||||
( ) 23. (1.5分) 程序输入的m不能等于0。( )
|
||||
|
||||
( ) 24. (1.5分) 第9~19行的do...while循环一共有2个出口。( )
|
||||
|
||||
( ) 25. (1.5分) 数组a和b中的数值都小于或等于n。( )
|
||||
|
||||
**单选题**
|
||||
|
||||
( ) 26. (3分) 若输入数据为“11 8”,则输出结果为( )
|
||||
A. 0.375 B. `0.(375)` C. 1.375 D. `1.(375)`
|
||||
|
||||
( ) 27. (3分) 若输入数据为“5 13”,则输出结果为( )。
|
||||
A. 0.386514 B. `0.(386514)` C. 0.384615 D. `0.(384615)`
|
||||
|
||||
**(3)**
|
||||
|
||||
```cpp
|
||||
1 #include <algorithm>
|
||||
2 #include <iostream>
|
||||
3 using namespace std;
|
||||
4
|
||||
5 int n;
|
||||
6 int d[50][2];
|
||||
7 int ans;
|
||||
8
|
||||
9 void dfs(int n, int sum) {
|
||||
10 if (n == 1) {
|
||||
11 ans = max(sum, ans);
|
||||
12 return;
|
||||
13 }
|
||||
14 for (int i = 1; i < n; ++i) {
|
||||
15 int a = d[i - 1][0], b = d[i - 1][1];
|
||||
16 int x = d[i][0], y = d[i][1];
|
||||
17 d[i - 1][0] = a + x;
|
||||
18 d[i - 1][1] = b + y;
|
||||
19 for (int j = i; j < n - 1; ++j)
|
||||
20 d[j][0] = d[j + 1][0], d[j][1] = d[j + 1][1];
|
||||
21 int s = a + x + abs(b - y);
|
||||
22 dfs(n - 1, sum + s);
|
||||
23 for (int j = n - 1; j > i; --j)
|
||||
24 d[j][0] = d[j - 1][0], d[j][1] = d[j - 1][1];
|
||||
25 d[i - 1][0] = a, d[i - 1][1] = b;
|
||||
26 d[i][0] = x, d[i][1] = y;
|
||||
27 }
|
||||
28 }
|
||||
29
|
||||
30 int main() {
|
||||
31 cin >> n;
|
||||
32 for (int i = 0; i < n; ++i)
|
||||
33 cin >> d[i][0];
|
||||
34 for (int i = 0; i < n;++i)
|
||||
35 cin >> d[i][1];
|
||||
36 ans = 0;
|
||||
37 dfs(n, 0);
|
||||
38 cout << ans << endl;
|
||||
39 return 0;
|
||||
40 }
|
||||
```
|
||||
|
||||
假设输入的 $n$ 是不超过50的正整数,$d[i][0], d[i][i]$ 都是不超过10000的正整数,完成下面的判断题和单选题
|
||||
|
||||
**判断题**
|
||||
|
||||
( ) 28. (1.5分) 若输入 n 为 0,此程序可能会死循环或发生运行错误。( )
|
||||
|
||||
( ) 29. (1.5分) 若输入 $n$ 为20,接下来的输入全为0,则输出为0。( )
|
||||
|
||||
( ) 30. (1.5分) 输出的数一定不小于输入的 $d[i][0]$ 和 $d[i][1]$ 的任意一个。( )
|
||||
|
||||
**单选题**
|
||||
|
||||
( ) 31. (3分) 若输入的 $n$ 为20,接下来的输入是20个9和20个0,则输出为( )。
|
||||
A. 1890 B. 1881 C. 1908 D. 1917
|
||||
|
||||
( ) 32. (3分) 若输入的 $n$ 为30,接下来的输入是30个0和30个5,则输出为( )。
|
||||
A. 2000 B. 2010 C. 2030 D. 2020
|
||||
|
||||
( ) 33. (4分) 若输入的 $n$ 为15,接下来的输入是15到1,以及15到1,则输出为( )。
|
||||
A. 2440 B. 2220 C. 2240 D. 2420
|
||||
|
||||
---
|
||||
|
||||
#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 9 小题,共计 26 分,各小题分值见题目)**
|
||||
|
||||
**(1)**
|
||||
|
||||
完善程序:
|
||||
(数字删除)下面程序的功能是将字符串中的数字字符删除后输出。请填空。
|
||||
|
||||
```cpp
|
||||
1 #include <iostream>
|
||||
2 using namespace std;
|
||||
3 int delnum( char *s )
|
||||
4 {
|
||||
5 int i, j;
|
||||
6 j = 0;
|
||||
7 for ( i = 0; s[i] != '\0'; i++ )
|
||||
8 if ( s[i] < '0' __(1)__ s[i] > '9' )
|
||||
9 {
|
||||
10 s[j] = s[i];
|
||||
11 __(2)__;
|
||||
12 }
|
||||
13 return(__(3)__);
|
||||
14 }
|
||||
15 const int SIZE = 30;
|
||||
16 int main()
|
||||
17 {
|
||||
18 char s[SIZE];
|
||||
19 int len, i;
|
||||
20 cin.getline( s, sizeof(s) );
|
||||
21 len = delnum( s );
|
||||
22 for ( i = 0; i < len; i++ )
|
||||
23 cout << __(4)__;
|
||||
24 cout << endl;
|
||||
25 return 0;
|
||||
26 }
|
||||
```
|
||||
|
||||
( ) 34. (3分) (1)处应填:________________
|
||||
|
||||
( ) 35. (3分) (2)处应填:________________
|
||||
|
||||
( ) 36. (3分) (3)处应填:________________
|
||||
|
||||
( ) 37. (3分) (4)处应填:________________
|
||||
|
||||
**(2)**
|
||||
|
||||
对于一个1到 $n$ 的排列 $P$ (即1到 $n$ 中每一个数在 $P$ 中出现了恰好一次),令 $q[i] = \text{第} i$ 个位置之后第一个比 $P[i]$ 值更大的位置,如果不存在这样的位置,则$q[i] = n + 1$ 。举例来说,如果 $n = 5$ 且 $P$ 为15423,则 $q$ 为26656。
|
||||
|
||||
```cpp
|
||||
1 #include <iostream>
|
||||
2 using namespace std;
|
||||
3
|
||||
4 const int N = 100010;
|
||||
5 int n;
|
||||
6 int L[N], R[N], a[N];
|
||||
7
|
||||
8 int main() {
|
||||
9 cin >> n;
|
||||
10 for (int i = 1; i <= n; ++i) {
|
||||
11 int x;
|
||||
12 cin >> x;
|
||||
13 __(1)__ ;
|
||||
14 }
|
||||
15
|
||||
16 for (int i = 1; i <= n; ++i) {
|
||||
17 R[i] = __(2)__ ;
|
||||
18 L[i] = i - 1;
|
||||
19 }
|
||||
20
|
||||
21 for (int i = 1; i <= n; ++i) {
|
||||
22 L[__(3)__] = L[a[i]];
|
||||
23 R[L[a[i]]] = R[__(4)__];
|
||||
24 }
|
||||
25
|
||||
26 for (int i = 1; i <= n; ++i) {
|
||||
27 cout << __(5)__ << " ";
|
||||
28 }
|
||||
29
|
||||
30 cout << endl;
|
||||
31 return 0;
|
||||
32 }
|
||||
```
|
||||
|
||||
( ) 38. (3分) (1)处应填:________________
|
||||
|
||||
( ) 39. (2分) (2)处应填:________________
|
||||
|
||||
( ) 40. (3分) (3)处应填:________________
|
||||
|
||||
( ) 41. (3分) (4)处应填:________________
|
||||
|
||||
( ) 42. (3分) (5)处应填:________________
|
||||
Reference in new issue
Block a user