当前位置:   article > 正文

2023年12月青少年C/C++软件编程(二级)等级考试试卷及答案解析_c++计算好数

c++计算好数

青少年软件编程(C语言)等级考试试卷(二级)

目录

青少年软件编程(C语言)等级考试试卷(二级)

1.统计指定范围里的数

2.细菌的繁殖与扩散

3.错误探测

4.单词排序

5.计算好数


1.统计指定范围里的数

给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。

时间限制:1000

内存限制:65536

输入

第一行1个整数n、,分别表示序列的长度。(0 < n ≤ 10000) 第二行n个正整数,表示序列里的每一个数,每个数小于等于10000000 第三行2个整数L、R,分别表示区间的左端点,区间的右端点。(1 ≤ L ≤ R ≤ 1000000)

输出

输出一个整数,表示序列中大于等于L且小于等于R的数的个数。

样例输入

5

11 8 1 10 16

1 10

样例输出

3

  1. #include<iostream>
  2. using namespace std;
  3. int l, r;
  4. int n;
  5. int a[10005];
  6. int cnt = 0;
  7. int main() {
  8. cin >> n;
  9. for(int i = 1; i <= n; i++) {
  10. cin >> a[i];
  11. }
  12. cin >> l >> r;
  13. for(int i = 1; i <= n; i++) {
  14. if(a[i] >= l && a[i] <= r) {
  15. cnt++;
  16. }
  17. }
  18. cout << cnt;
  19. return 0;
  20. }

2.细菌的繁殖与扩散

在边长为9的正方形培养皿中,正中心位置有m个细菌。假设细菌的寿命仅一天,但每天可繁殖10个后代,而且这10个后代,有两个分布在原来的单元格中,其余的均匀分布在其四周相邻的八个单元格中。求经过n(1≤n≤4)天后,细菌在培养皿中的分布情况。

时间限制:10000

内存限制:65536

输入

输入为两个整数,第一个整数m表示中心位置细菌的个数(2 ≤ m ≤ 30),第二个整数n表示经过的天数(1 ≤ n ≤ 4)。

输出

输出九行九列整数矩阵,每行的整数之间用空格分隔。整个矩阵代表n天后细菌在培养皿上的分布情况。

样例输入

2 1

样例输出

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 2 2 2 0 0 0

0 0 0 2 4 2 0 0 0

0 0 0 2 2 2 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

详见代码: 

  1. #include<iostream>
  2. using namespace std;
  3. int m, n;
  4. int a[10][15][15];
  5. int dx[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
  6. int dy[8] = {-1, 0, 1, 1, -1, -1, 0, 1};
  7. int main() {
  8. cin >> m >> n;
  9. a[0][5][5] = m;
  10. for(int i = 1; i <= n; i++) {
  11. for(int j = 1; j <= 9; j++) {
  12. for(int k = 1; k <= 9; k++) {
  13. a[i][j][k] += a[i - 1][j][k] * 2;
  14. for(int l = 0; l < 8; l++) {
  15. a[i][j + dx[l]][k + dy[l]] += a[i - 1][j][k];
  16. }
  17. }
  18. }
  19. }
  20. for(int i = 1; i <= 9; i++) {
  21. for(int j = 1; j <= 9; j++) {
  22. cout << a[n][i][j] << " ";
  23. }
  24. cout << endl;
  25. }
  26. return 0;
  27. }

3.错误探测

给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。 
你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。 
"改变矩阵元素"的操作定义为0变成1或者1变成0。

时间限制:1000

内存限制:65536

输入

输入n + 1行,第1行为矩阵的大小n(0 < n < 100),以下n行为矩阵的每一行的元素,元素之间以一个空格分开。

输出

如果矩阵符合条件,则输出OK; 如果矩阵仅改变一个矩阵元素就能符合条件,则输出需要改变的元素所在的行号和列号,以一个空格分开。 如果不符合以上两条,输出Corrupt。

样例输入

样例输入1

4

1 0 1 0

0 0 0 0

1 1 1 1

0 1 0 1

样例输入2

4

1 0 1 0

0 0 1 0

1 1 1 1

0 1 0 1

样例输入3

4

1 0 1 0

0 1 1 0

1 1 1 1

0 1 0 1

样例输出

样例输出1

OK

样例输出2

2 3

样例输出3

Corrupt

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[105][105];
  4. int n;
  5. int hang=0,lie=0;
  6. int h,l;
  7. int main()
  8. {
  9. cin>>n;
  10. for (int i=1;i<=n;i++)
  11. {
  12. for (int j=1;j<=n;j++)
  13. {
  14. cin>>a[i][j];
  15. }
  16. }
  17. for (int i=1;i<=n;i++)
  18. {
  19. int sumh=0;
  20. int suml=0;
  21. for (int j=1;j<=n;j++)
  22. {
  23. sumh+=a[i][j];
  24. suml+=a[j][i];
  25. }
  26. if (sumh%2!=0)
  27. {
  28. hang++;
  29. h=i;
  30. }
  31. if (suml%2!=0)
  32. {
  33. lie++;
  34. l=i;
  35. }
  36. }
  37. if (hang==0&&lie==0)
  38. {
  39. cout<<"OK"<<endl;
  40. }else if (hang==1&&lie==1)
  41. {
  42. cout<<h<<" "<<l<<endl;
  43. }else
  44. {
  45. cout<<"Corrupt"<<endl;
  46. }
  47. return 0;
  48. }

4.单词排序

输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。(区分大小写)

时间限制:10000

内存限制:65536

输入

一行单词序列(长度小于10000),最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符。

输出

按字典序输出这些单词,重复的单词只输出一次。

样例输入

She  wants  to go to Peking University to study  Chinese

样例输出

Chinese

Peking

She

University

go

study

to

wants

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. string a[105];
  4. int main()
  5. {
  6. int p=0;
  7. while (cin>>a[p])//循环输入
  8. {
  9. p++;
  10. }
  11. for (int i=1;i<p;i++)//插入排序
  12. {
  13. for (int j=i;j>0;j--)
  14. {
  15. if (a[j]<a[j-1])
  16. {
  17. swap(a[j],a[j-1]);
  18. }else
  19. {
  20. break;
  21. }
  22. }
  23. }
  24. for (int i=0;i<p;i++)//循环输出
  25. {
  26. if(a[i]!=a[i-1]||i==0)//过滤重复项
  27. cout<<a[i]<<endl;
  28. }
  29. return 0;
  30. }

5.计算好数

若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为好数。

例如:

(13)10 = (1101)2,其中1的个数为3,0的个数为1,则此数是好数;

(10)10 = (1010)2,其中1的个数为2,0的个数也为2,则此数不是好数;

(24)10 = (11000)2,其中1的个数为2,0的个数为3,则此数不是好数;

对于给定的N,写程序求出1~N之中(包括1与N)中的好数个数。

时间限制:1000

内存限制:65536

输入

一个整数,题目中的N(N ≤ 1000)

输出

一个整数,表示1~N之中(包括1与N)中的好数个数

样例输入

10

样例输出

5

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int cnt=0,n;
  4. int main()
  5. {
  6. cin>>n;
  7. for(int i=1;i<=n;i++)
  8. {
  9. int yi=0;//1的个数
  10. int ling=0;//0的个数
  11. int k=i;//使用k进行转换
  12. while(k)//模2除2计算出每一位
  13. {
  14. if(k%2==1)
  15. yi++;
  16. else
  17. ling++;
  18. k/=2;
  19. }
  20. if(yi>ling)//好数判断
  21. cnt++;
  22. }
  23. cout<<cnt<<endl;
  24. return 0;
  25. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/707064
推荐阅读
相关标签
  

闽ICP备14008679号