答案
第
12 届蓝桥杯 C++青少组中 /高级组选拔赛( STEMA)2020 年11 月22 日
真题
题目总数: 5
总分数:128
编程题
第 1 题
问答题
求和
【题目描述】
输入一个正整数 N(N < 100),输出 1 到 N( 包含 1 和 N) 之间所有奇数的和。
【输入描述】
输入一个正整数 N(N < 100)
【输出描述】
输出 1 到 N 之间的所有奇数的和
【输入样例】
【输出样例】
3
4
# include <iostream>
using namespace std;
int main () {
int n;
cin >> n;
int sum = 0;
for (int i = 1; i <= n; i++) {
if (i % 2 == 1) {
sum += i;
}
}
cout << sum << endl;
1
2
3
4
5
6
7
8
9
10
11
12
13
解析
本题属于简单题,考察累加器和循环的使用。定义累加器 sum 并初始化为 0,循环枚举 i 从 1 到
n ,判断 i 如果为奇数,则累加 sum += i。循环结束后输出 sum。对循环理解较好的同学,也可以
去掉 if 判断,将 i++改为 i += 2 ,直接累加,也可达到奇数求和的效果。
第 2 题
问答题
求平方
【题目描述】
平方是一种运算,比如: a 的平方表示 a × a。
例如: 2 的平方为 4(也就是 2*2 的积)
例如: 4 的平方为 16(也就是 4*4 的积)
输入一个正整数 N(N < 30),输出 1 到 N( 包含 1 和 N) 之间所有正整数的平方,且所输出的平方数之间以英文
逗号隔开。
【输入描述】
输入一个正整数 N(N < 30)
【输出描述】
输出所有正整数的平方数,以英文逗号隔开
【输入样例】
【输出样例】
return 0;
}
14
// 参 考 代 码 2
#include <bits/stdc++.h>
using namespace std;
int n;
int main () {
cin >> n;
int sum = 0;
for (int i = 1; i <= n; i += 2)
sum += i;
cout << sum;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
3
1,4,9
答案
解析
本题属于简单题,考察循环的使用。大部分失分的同学主要错在输出格式上。题目中要求输出时用
英文逗号隔开,不能加空格或者使用中文逗号,并且最后一个平方数后面不能有英文逗号,因此在
循环输出时,判断循环变量 i,如果不是输出最后一个数,则输出英文逗号 ",",否则不输出。
第 3 题
问答题
数位递增数
【题目描述】
一个正整数如果任何一个数位小于等于右边相邻的数位,则称为一个数位递增数。
例如:
1135 是一个数位递增数
1024 不是一个数位递增数
输入一个正整数 n(11<n<10001) ,输出 11 到 n( 包含 11和n)中有多少个数位递增数。
例如:输入 15,11 到 15 之间的数位递增数有: 11、12 、13 、14 、15 。一共有 5 个。
【输入描述】
输入一个正整数 n(11<n<10001)
【输出描述】
输出 11 到 n 中有多少个数位递增数
#include <iostream>
using namespace std;
int main () {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cout << i * i;
if (i != n) {
cout << ",";
}
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
// 参 考 代 码 2
#include <bits/stdc++.h>
using namespace std;
int n;
int main () {
cin >> n;
cout << "1";
for (int i = 2; i <= n; i++)
cout << ',' << i * i;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
答案
【输入样例】
【输出样例】
15
5
# include <iostream>
using namespace std;
int main () {
int n;
cin >> n;
int cnt = 0;
for (int i = 11; i <= n; i++) {
int a = i / 10000 % 10; // 万 位
int b = i / 1000 % 10; // 千 位
int c = i / 100 % 10; // 百 位
int d = i / 10 % 10; // 十 位
int e = i % 10; // 个 位
if (a <= b && b <= c && c <= d && d <= e) {
cnt++;
}
}
cout << cnt << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 参 考 代 码 2
#include <bits/stdc++.h>
using namespace std;
int n;
int main () {
cin >> n;
int sum = 0;
for (int i = 11; i <= n; i++) {
string s;
stringstream ss;
ss << i;
ss >> s;
int f = 0;
for (int j = 1; j <= s. size() - 1; j++)
if (s[j] < s[j - 1]) {
f = 1;
break;
}
if (!f)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
解析
本题与之前课上所做的水仙花数、四叶玫瑰数类似,考察循环枚举与数位分离的
第12届蓝桥杯C++青少组中_高级组选拔赛(STEMA)2020年11月22日真题-附答案,2020年11月22日第12届蓝桥杯青少组C++中高级组STEMA选拔赛真题答案