信息素养大赛星火征途2026小学C++7月11日真题及题解
优秀通讯员
题目描述
红军某连队正在选拔优秀的通讯员。战士必须同时满足以下两个条件:
- 年龄 age 在 14~18 之间(包含14、18);
- 100米跑成绩 run 严格低于15秒(不包含15秒)。
同时满足两项标准,输出 Excellent;否则输出 Pass。
输入
一行两个正整数 age、run,空格隔开。
输出
一行字符串,严格区分大小写。
数据范围
14≤age≤18,0<run<15
输入样例1
15 14
输出样例1
Excellent
输入样例2
13 14
输出样例2
Pass
#include <bits/stdc++.h>
using namespace std;
int main(){
int age,run;
cin >> age >> run;
if(age >= 14 and age <= 18 and run < 15){
cout << "Excellent";
}
else{
cout <<"Pass";
}
return 0;
}
电报码筛选
题目描述
我方截获敌军加密电报,由 N 个三位正整数组成。一个数字是“重要情报”需要同时满足两条规则:
- 该数字是 3 的倍数;
- 该数字个位数字为 7。
统计电报里符合条件的数字总个数。
输入
第一行:正整数 N,数字总个数; 第二行:N 个三位正整数,空格分隔。
输出
输出一个整数:符合条件的数字数量。
数据范围
1≤N≤1000,100≤num≤999
输入样例1
3 127 117 217
输出样例1
1
输入样例2
4 333 107 999 100
输出样例2
0
#include <bits/stdc++.h>
using namespace std;
int ans = 0;
void slove(){
int num;
cin >> num;
if(num % 3 == 0 and num % 10 == 7) ans ++;
}
int main(){
int n;
cin >> n;
while(n--){
slove();
}
cout <<ans;
return 0;
}
电报密文修复
题目描述
有效密文必须同时满足全部三条“三位一体”规则:
- 指令以大写字母 R 开头,以大写字母 A 结尾;
- 去掉首字符 R、尾字符 A 后的中间部分,恰好包含 3 个数字字符;
- 整个字符串总长度(包含 R 和 A)≤ 10。
给定 n 条候选指令,统计有效指令的条数。
输入
第一行整数 n,代表候选指令条数; 接下来 n 行,每行一条由大小写字母、数字组成的字符串。
输出
输出一个整数:有效指令的总数量。
数据范围
1≤n≤1000,1≤密文长度≤10
输入样例1
4
R123A
R1a2b3A
R1234A
R12A
输出样例1
2
输入样例2
5
R007abcdeA
R007abcdefA
r123A
R123a
A123R
输出样例2
1
#include <bits/stdc++.h>
using namespace std;
int ans = 0;
void slove(){
string s;
cin >> s;
int len = s.length();
if(s[0] =='R' and s[len - 1]=='A' and len<=10){
bool f =1;
int cnt =0;
for(int i = 1;i < len -1;i ++){
if(s[i] >= '0' and s[i] <='9'){
cnt++;
}
}
if(cnt==3)ans++;
}
}
int main(){
int n;
cin >> n;
for(int i=0;i < n;i ++){
slove();
}
cout << ans;
}
火力掩护阵地
题目描述
长征途中的一场阻击战中,红军尖刀连沿阵地一线构筑了 N 个火力掩体,负责掩护主力部队转移。为保障阵地两翼火力均衡、形成稳定的掩护防线,指挥员需要从所有掩体中选出最优的 “黄金掩体” 作为核心火力支撑点。
总共有 N 个掩体,编号 1~N,火力数组 F[1..N]。掩体 i 成为“黄金掩体”的前提:
- 左边至少有 k 个掩体,右边至少有 k 个掩体(合法 i 范围为 k+1 ≤ i ≤ N-k);
- 计算左侧 k 个邻居和与右侧 k 个邻居和,取绝对值 abs(S_left - S_right)。
筛选规则:找出所有合法 i 中“差值绝对值最小”的位置;若多个位置差值相同,选“编号最大”的那个;若无合法位置,输出 -1。
输入
第一行:N, k 第二行:N 个非负整数 F[1] ~ F[N]
输出
输出符合条件的掩体编号,无则输出 -1。
数据范围
1≤N≤10^5
输入样例1
7 2 10 15 30 50 20 5 25
输出样例1
4
输入样例2
5 1 10 20 10 30 10
输出样例2
4
#include <bits/stdc++.h>
using namespace std;
const int N = 10E5 + 10;
int f[N],pre[N];
int main(){
int n,k;
cin >> n >> k;
for(int i = 1;i <= n;i++){
cin>>f[i];
pre[i] = pre[i - 1] + f[i];
}
int ans = -1,min = N;
for(int i = n - k;i >= k + 1; i --){
int S_right=pre[i + k] - pre[i],S_left=pre[i-1]-pre[i-1-k];
int cha = abs(S_right-S_left);
if(cha < min){
min = cha;
ans = i;
}
}
cout << ans;
return 0;
}

浙公网安备 33010602011771号