乐于分享
好东西不私藏

2026信息素养复赛模拟题【C++ 4-6年级组】

2026信息素养复赛模拟题【C++ 4-6年级组】

2026全国青少年信息素养大赛复赛模拟题

C++ 4-6年级组

考试时间:90分钟 | 总分:120分 | 编程语言:C++


注意事项

  1. 请将答案通过标准输入输出(cin/cout)提交
  2. 每题需独立编写完整程序
  3. 程序运行时间限制:1秒
  4. 内存限制:256MB

第一题:文具店购物

分值:10分 | 难度:★★☆

题目描述

小明去文具店买文具,钢笔每支 8 元,圆珠笔每支 3 元,橡皮每个 2 元。

已知小明买了 a 支钢笔、b 支圆珠笔、c 个橡皮,请计算他需要支付的总金额。

输入格式

三个整数 a、b、c,分别表示购买的钢笔、圆珠笔、橡皮的数量,之间用空格分隔。

输出格式

一个整数,表示需要支付的总金额。

样例输入

3 5 4

样例输出

47

数据范围

  • 0 ≤ a, b, c ≤ 100

知识点

顺序结构、基本运算


第二题:成绩等级判断

分值:15分 | 难度:★★☆

题目描述

根据学生的考试分数,判断该学生的成绩等级:

  • 90 分及以上:输出 A
  • 80 分及以上:输出 B
  • 70 分及以上:输出 C
  • 60 分及以上:输出 D
  • 60 分以下:输出 E

输入格式

一个整数 score,表示学生的考试成绩。

输出格式

输出一个字符,表示成绩等级。

样例输入

85

样例输出

B

数据范围

  • 0 ≤ score ≤ 100

知识点

if-else 分支结构


第三题:数组元素统计

分值:20分 | 难度:★★★

题目描述

给定一个包含 n 个整数的一维数组,统计数组中:

  1. 正数的个数
  2. 负数的个数
  3. 零的个数
  4. 所有正数的和

输入格式

第一行一个整数 n(1 ≤ n ≤ 100),表示数组长度。第二行 n 个整数,表示数组元素。

输出格式

四个整数,分别表示正数个数、负数个数、零的个数、正数之和,之间用空格分隔。

样例输入

7-3 0 5 2 -1 0 8

样例输出

3 2 2 15

数据范围

  • 1 ≤ n ≤ 100
  • -1000 ≤ 数组元素 ≤ 1000

知识点

一维数组、循环、条件统计


第四题:完数判定

分值:25分 | 难度:★★★

题目描述

如果一个自然数恰好等于它的所有真因子(即不包括它本身的因子)之和,则称这个数为"完数"。

例如,6 的真因子有 1、2、3,且 1+2+3=6,所以 6 是完数。

请判断输入的整数 n(1 ≤ n ≤ 10000)是否为完数。如果是,输出 yes,否则输出 no。

输入格式

一个整数 n。

输出格式

如果是完数输出 yes,否则输出 no。

样例输入

6

样例输出

yes

样例说明

6 的真因子之和为 1+2+3=6,所以是完数。

数据范围

  • 1 ≤ n ≤ 10000

知识点

数位分离思想(本题为因子枚举)、循环


第五题:矩阵对角线求和

分值:25分 | 难度:★★★★

题目描述

给定一个 n×n 的方阵,分别计算主对角线和副对角线上所有元素的和并输出。

  • 主对角线:从左上到右下(行列下标相同)
  • 副对角线:从右上到左下

输入格式

第一行一个整数 n(2 ≤ n ≤ 20),表示矩阵大小。接下来 n 行,每行 n 个整数,表示矩阵元素。

输出格式

两个整数,分别表示主对角线元素之和、副对角线元素之和,之间用空格分隔。

样例输入

31 2 34 5 67 8 9

样例输出

15 15

样例说明

主对角线:1+5+9=15,副对角线:3+5+7=15。

数据范围

  • 2 ≤ n ≤ 20
  • -100 ≤ 矩阵元素 ≤ 100

知识点

二维数组、循环、对角线性质


第六题:排队打水

分值:25分 | 难度:★★★★

题目描述

有 n 个人需要排队打水,第 i 个人的打水时间为 ti 秒。按照排队顺序,打水时间越长的人排在越后面越好(因为这样总等待时间更短)。

请找出最优的排队顺序,使得所有人的总等待时间最小。

总等待时间 = 第1个人等待时间 + 第2个人等待时间 + ... + 第n个人的等待时间其中第 i 个人需要等待前 i-1 个人的打水时间之和。

输出最小总等待时间。

输入格式

第一行一个整数 n(1 ≤ n ≤ 100)。第二行 n 个整数 t1, t2, ..., tn,表示每个人的打水时间。

输出格式

一个整数,表示最小总等待时间。

样例输入

53 6 4 2 5

样例输出

30

样例说明

最优顺序(升序排列):2, 3, 4, 5, 6

  • 第1人等待:0秒
  • 第2人等待:2秒
  • 第3人等待:2+3=5秒
  • 第4人等待:2+3+4=9秒
  • 第5人等待:2+3+4+5=14秒
  • 最小总等待时间 = 0+2+5+9+14 = 30秒

数据范围

  • 1 ≤ n ≤ 100
  • 1 ≤ ti ≤ 1000

知识点

贪心算法、一维数组排序


参考答案

第一题:文具店购物

解题思路:直接根据单价和数量计算总金额:总金额 = 钢笔数×8 + 圆珠笔数×3 + 橡皮数×2。

参考答案代码:

#include<iostream>using namespace std;intmain(){ int a, b, c; cin >> a >> b >> c; int total = a * 8 + b * 3 + c * 2; cout << total << endl; return 0;}

样例验证:

  • 输入:3 5 4
  • 计算:3×8 + 5×3 + 4×2 = 24 + 15 + 8 = 47
  • 输出47 ✓

第二题:成绩等级判断

解题思路:使用 if-else 分支从高到低判断分数所在的等级区间,符合条件即输出对应等级。

参考答案代码:

#include <iostream>using namespace std;int main() { int score; cin >> score; if (score >= 90) { cout << ”A” << endl; } else if (score >= 80) { cout << ”B” << endl; } else if (score >= 70) { cout << ”C” << endl; } else if (score >= 60) { cout << ”D” << endl; } else { cout << ”E” << endl; } return 0;}

样例验证:

  • 输入:85
  • 判断:85 < 90,85 < 80? 否 → 85 >= 80? 是 → 输出 B ✓

第三题:数组元素统计

解题思路:遍历数组中的每个元素,根据其正负性分别统计正数个数、负数个数、零的个数,同时累加所有正数的和。

参考答案代码:

#include<iostream>using namespace std;intmain(){ int n; cin >> n; int posCount = 0, negCount = 0, zeroCount = 0, posSum = 0; for (int i = 0; i < n; i++) { int x; cin >> x; if (x > 0) { posCount++; posSum += x; } else if (x < 0) { negCount++; } else { zeroCount++; } } cout << posCount << ” ” << negCount << ” ” << zeroCount << ” ” << posSum << endl; return 0;}

样例验证:

  • 输入:7, -3 0 5 2 -1 0 8
  • 正数:5,2,8 → 3个,和=15 ✓
  • 负数:-3,-1 → 2个 ✓
  • 零:0,0 → 2个 ✓
  • 输出:3 2 2 15 ✓

第四题:完数判定

解题思路:枚举 1 到 n/2 的所有整数,能整除 n 的即为真因子,累加所有真因子后与 n 比较。

参考答案代码:

#include<iostream>using namespace std;// 判断是否为完数boolisPerfect(int n){ int sum = 0; for (int i = 1; i <= n / 2; i++) { if (n % i == 0) { sum += i; } } return sum == n;}intmain(){ int n; cin >> n; if (isPerfect(n)) { cout << ”yes” << endl; } else { cout << ”no” << endl; } return 0;}

样例验证:

  • 输入:6
  • 真因子:1,2,3(6/2=3,1~3遍历)
  • 1+2+3=6,等于n → 输出 yes ✓
  • 扩展验证:输入28(完数),真因子1,2,4,7,14,和=28 → yes

第五题:矩阵对角线求和

解题思路:主对角线下标为 (i,i),副对角线下标为 (i,n-1-i)。遍历时分别累加主对角线和副对角线的元素之和。

参考答案代码:

#include<iostream>using namespace std;intmain(){ int n; cin >> n; int a[20][20]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; } } int primary = 0, secondary = 0; for (int i = 0; i < n; i++) { primary += a[i][i]; secondary += a[i][n - 1 - i]; } cout << primary << ” ” << secondary << endl; return 0;}

样例验证:

  • 输入:3, 矩阵[[1,2,3],[4,5,6],[7,8,9]]
  • 主对角线:a[0][0]+a[1][1]+a[2][2] = 1+5+9 = 15 ✓
  • 副对角线:a[0][2]+a[1][1]+a[2][0] = 3+5+7 = 15 ✓
  • 输出:15 15 ✓

第六题:排队打水

解题思路:根据贪心策略,打水时间短的人排在前面总等待时间最小。将打水时间升序排列后,计算前缀和之和即可得到最小总等待时间。

参考答案代码:

#include<iostream>#include<algorithm>using namespace std;intmain(){ int n; cin >> n; int t[100]; for (int i = 0; i < n; i++) { cin >> t[i]; } // 贪心策略:打水时间升序排列 sort(t, t + n); // 计算总等待时间 long long total = 0; long long prefix = 0; // 前缀和 for (int i = 0; i < n; i++) { // 第i个人等待前i个人的打水时间(即前缀和) total += prefix; prefix += t[i]; } cout << total << endl; return 0;}

样例验证:

  • 输入:n=5, t=[3,6,4,2,5]
  • 排序后:[2,3,4,5,6]
  • 第1人:等待0,前缀和变为2
  • 第2人:等待2,前缀和变为5
  • 第3人:等待5,前缀和变为9
  • 第4人:等待9,前缀和变为14
  • 第5人:等待14,前缀和变为20
  • 总等待时间 = 0+2+5+9+14 = 30 ✓

评分标准

题目
分值
评分要点
第一题
10
正确理解题意,计算正确
第二题
15
条件判断完整,覆盖所有情况
第三题
20
数组遍历正确,统计准确
第四题
25
因子枚举正确,累加逻辑无误
第五题
25
对角线索引计算正确,分别累加主副对角线
第六题
25
贪心策略正确,排序实现无误,前缀和计算正确


为了让大家沟通交流更高效,对少儿编程课程、比赛、考级感兴趣的家长或老师,可以扫码进群

为了群内的高效沟通,减少噪音信息,我把每个群的人数设为20人左右

相关学习资料