CSP-J 初赛模拟卷(第 04 套)
入门级 C++ 语言试题
--- #### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** ( ) 1. Linux下可执行文件的默认扩展名为( )。 A. exe  B. com  C. dll  D. 以上都不是 ( ) 2. 冒泡排序算法的伪代码如下。 输入:长度为 n 的数组 L。输出:按非递减顺序排序的 L。 ```text 1 FLAG ← n 2 while FLAG > 1 do 3 k ← FLAG - 1 4 FLAG ← 1 5 for j = 1 to k do 6 if L(j) > L(j+1) then 7 L(j) ↔ L(j+1) 8 FLAG ← j ``` 对 n 个数用以上冒泡排序算法进行排序,最少需要比较多少次?( ) A. n²  B. n - 2  C. n - 1  D. n ( ) 3. 地址总线的位数决定了 CPU 可直接寻址的内存空间大小,例如地址总线为 16 位,其最大的可寻址空间为 64KB。如果地址总线是 32 位,则理论上最大可寻址的内存空间为( )。 A. 128KB  B. 1MB  C. 1GB  D. 4GB ( ) 4. 无向完全图是图中每对顶点之间都恰好有一条边的简单图。已知无向完全图G有7个顶点,则它共有( )条边。 A. 7  B. 21  C. 42  D. 49 ( ) 5. 下列说法正确的是( )。 A. CPU的主要任务是执行数据运算和程序控制 B. 存储器具有记忆能力,其中信息任何时候都不会丢失 C. 两个显示器屏幕尺寸相同,则它们的分辨率必定相同 D. 个人用户只能使用 Wifi 的方式连接到 Internet ( ) 6. 以A0作为起点,对下面的无向图进行深度优先遍历时,遍历顺序不可能是( )。 题目图示 A. $A_0,A_1,A_2,A_3$  B. $A_0,A_1,A_3,A_2$  C. $A_0,A_2,A_1,A_3$  D. $A_0,A_3,A_1,A_2$ ( ) 7. 完全二叉树的顺序存储方案,是指将完全二叉树的结点从上至下、从左至右依次存放到一个顺序结构的数组中。假定根结点存放在数组的1号位置,则第k号结点的父结点如果存在的话,应当存放在数组的( )号位置。 A. 2k  B. `2k+1`  C. `k/2下取整`  D. `(k+1)/2下取整` ( ) 8. 下列几个32位IP地址中,书写错误的是( )。 A. 162.105.135.27  B. 192.168.0.1  C. 256.256.129.1  D. 10.0.0.1 ( ) 9. 设 $X$ 、 $Y$ 、 $Z$ 分别代表三进制下的一位数字,若等式 $XY + ZX = XYX$ 在三进制下成立,那么同样在三进制下,等式$XY*ZX = ()$ 也成立。 A. YXZ  B. ZXY  C. XYZ  D. XZY ( ) 10. 有7个一模一样的苹果,放到3个一样的盘子中,盘子可以为空,一共有( )种放法。 A. 7  B. 8  C. 21  D. $3^7$ ( ) 11. 现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、400。若待合并结点权值相同,优先选取由其他结点合并形成的结点。那么,“也”字的编码长度可能是( )。 A. 1  B. 2  C. 3  D. 4 ( ) 12. 某算法的计算时间表示为递推关系式 $T(n) = T(n - 1) + n(n$ 为正整数)及 $T(0) = 1$,则该算法的时间复杂度为( )。 A. $O(\log n)$  B. $O(n\log n)$  C. $O(n)$  D. $O(n^2)$ ( ) 13. 下图表示一个果园灌溉系统,有 A、B、C、D 四个阀门,每个阀门可以打开或关上,所有管道粗细相同,以下设置阀门的方法中,可以让果树浇上水的是( )。 题目图示 A. B 打开,其他都关上  B. AB 都打开,CD 都关上 C. A 打开,其他都关上  D. D 打开,其他都关上 ( ) 14. 10000 以内,与 10000 互质的正整数有( )个。 A. 2000  B. 4000  C. 6000  D. 8000 ( ) 15. 一些数字可以颠倒过来看,例如0、1、8颠倒过来还是本身,6颠倒过来是9, 9颠倒过来看还是6,其他数字颠倒过来都不构成数字。 类似的,一些多位数也可以颠倒过来看,比如106颠倒过来是901。假设某个城市的车牌只由5位数字组成,每一位都可以取0到9。 请问这个城市最多有多少个车牌倒过来恰好还是原来的车牌?( ) A. 60  B. 125  C. 75  D. 100 --- #### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 42 分,各小题分值见题目)** **(1)** ```cpp 1 #include 2 using namespace std; 3 int main() 4 { 5 const int SIZE=10; 6 int height[SIZE],num[SIZE],n,ans; 7 cin>>n; 8 for(int i=0;i>height[i]; 10 num[i]=1; 11 for(int j=0;j=num[i])) 13 num[i]=num[j]+1; 14 } 15 } 16 ans=0; 17 for(int i=0;ians) ans=num[i]; 19 } 20 cout<=num[i]"改为"num[j]>num[i]", 程序的输出结果不会改变。( ) ( ) 19. (1.5分) 将18行"num[i]>ans"改为"num[i]>=ans", 程序的输出结果不会改变。( ) **单选题** ( ) 20. (3分) 若输入的数据为 10 1 1 1 1 1 1 1 1 1 1 则程序的输出结果是( )。 A. 4  B. 3  C. 2  D. 1 ( ) 21. (3分) 若输人的数据为 10 3 2 5 11 12 7 4 10 15 6 因程序的输出结果是( )。 A. 4  B. 5  C. 6  D. 7 **(2)** ```cpp 1 #include 2 using namespace std; 3 const int maxn = 10000; 4 int n; 5 int a[maxn]; 6 int b[maxn]; 7 int f(int l, int r, int depth) { 8 if (l > r) 9 return 0; 10 int min = a[l], mink = l; 11 for (int i = l; i <= r; ++i) { 12 if (min > a[i]) { 13 min = a[i]; 14 mink = i; 15 } 16 } 17 int lres = f(l, mink - 1, depth + 1); 18 int rres = f(mink + 1, r, depth + 1); 19 return lres + rres + depth * b[mink]; 20 } 21 int main() { 22 cin >> n; 23 for (int i = 0; i < n; ++i) 24 cin >> a[i]; 25 for (int i = 0; i < n; ++i) 26 cin >> b[i]; 27 cout << f(0, n - 1, 1) << endl; 28 return 0; 29 } ``` **判断题** ( ) 22. (1.5分) 如果a数组有重复的数字,则程序运行时会发生错误。( ) ( ) 23. (1.5分) 如果b数组全为0,则输出为0。( ) **单选题** ( ) 24. (3分) 当 $n = 100$ 时,最坏情况下,与第12行的比较运算执行的次数最接近的是:( )。 A. 5000  B. 600  C. 6  D. 100 ( ) 25. (3分) 当n=100时,最好情况下,与第12行的比较运算执行的次数最接近的是:( )。 A. 100  B. 6  C. 5000  D. 600 ( ) 26. (3分) 当 $n = 10$ 时,若 $b$ 数组满足,对任意 $0 < = i < n,$ 都有 $b[i] = i + 1,$ 那么输出最大为( )。 A. 386  B. 383  C. 384  D. 385 ( ) 27. (4分) 当n=100时,若b数组满足,对任意 $0<=i 2 using namespace std; 3 #define MOD 19260817 4 #define MAXN 1005 5 long long A[MAXN][MAXN]={0},sum[MAXN][MAXN]={0}; 6 int n, m, q; 7 int main(){ 8 A[1][1]=A[1][0]=1; 9 for(int i=2;i <= 1000; i++) { 10 A[i][0]=1; 11 for(int j = 1; j <= i; j++) 12 A[i][j]=(A[i-1][j]+A[i-1][j-1])%MOD; 13 } 14 for(int i =1;i <= 1000; i++) 15 for(int j=1;j<=1000;j++) 16 sum[i][j]=(sum[i-1][j]+sum[i][j-1] 17 -sum[i-1][j-1]+A[i][j]+MOD)%MOD; 18 int q; 19 cin >> q; 20 while(q--){ 21 int n, m; 22 cin >> n >> m; 23 cout << sum[n][m] << endl; 24 } 25 return 0; 26 } ``` **判断题** ( ) 28. (1分) 当i<=j时,A[i][i]的值是0。( ) ( ) 29. (2分) 当i>j时,A[i][j]的值相当于从i个不同元素中取出j个元素的排列数。( ) ( ) 30. (2分) sum[i][j]的值(16的正整数,表示每条绳子的长度,第三行是一个不超过108的正整数m。 输出:绳段的最大长度,若无法切割,输出Failed。 ```cpp 1 #include 2 using namespace std; 3 int n, m, i, lbound, ubound, mid, count; 4 int len[100]; // 绳子长度 5 int main() 6 { 7 cin >> n; 8 count = 0; 9 for (i = 0; i < n; i++) 10 { 11 cin >> len[i]; 12 __(1)__; 13 } 14 cin >> m; 15 if (__(2)__) 16 { 17 cout << "Failed" << endl; 18 return 0; 19 } 20 lbound = 1; 21 ubound = 1000000; 22 while (__(3)__) 23 { 24 mid = __(4)__; 25 count = 0; 26 for (i = 0; i < n; i++) 27 __(5)__; 28 if (count < m) 29 ubound = mid - 1; 30 else 31 lbound = mid; 32 } 33 cout << lbound << endl; 34 return 0; 35 } ``` ( ) 34. (2.5分) (1)处应填:________________ ( ) 35. (2.5分) (2)处应填:________________ ( ) 36. (3分) (3)处应填:________________ ( ) 37. (3分) (4)处应填:________________ ( ) 38. (3分) (5)处应填:________________ **(2)** 完善程序 (排列数)输入两个正整数 $n$ , $m(1 < n < 20, 1 < m < n)$ ,在 $1 \sim n$ 中任取 $m$ 个数,按字典序从小到大输出所有这样的排列。 例如:输入:32 输出: ```cpp 1 #include 2 #include 3 using namespace std; 4 const int SIZE =25; 5 bool used[SIZE]; 6 int data[SIZE]; 7 int n,m,i,j,k; 8 bool flag; 9 int main() 10 { 11 cin>>n>>m; 12 memset(used,false,sizeof(used)); 13 for(i=1;i<=m;i++) 14 { 15 data[i]=i; 16 used[i]=true; 17 } 18 flag=true; 19 while(flag) 20 { 21 for(i=1;i<=m-1;i++) cout<=1;i--) 25 { 26 __(2)__; 27 for(j=data[i]+1;j<=n;j++) 28 if(!used[j]) 29 { 30 used[j]=true; 31 data[i]=__(3)__ ; 32 flag=true; 33 break; 34 } 35 if(flag) 36 { 37 for(k=i+1;k<=m;k++) 38 for(j=1;j<= __(4)__;j++) 39 if(!used[j]) 40 { 41 data[k]=j; 42 used[j]=true; 43 break; 44 } 45 __(5)__; 46 } 47 } 48 } 49 return 0; 50 } ``` ( ) 39. (3分) (1)处应填:________________ ( ) 40. (3分) (2)处应填:________________ ( ) 41. (3分) (3)处应填:________________ ( ) 42. (3分) (4)处应填:________________ ( ) 43. (3分) (5)处应填:________________