答案 第
12 届蓝桥杯 C++青少组中 /高级组选拔赛 2020年9月 20 日真题
题目总数: 5
总分数:128
编程题
第 1 题
问答题
开关
提示信息:
小蓝家的灯是线型开关的,拉一次灯开,再拉一次灯关,未拉之前灯是熄灭状态。
题目描述:
输入一个正整数 M(1<M<100),作为小蓝拉灯的次数,判断拉灯 M次后,灯是点亮状态还是熄灭状态。
输入描述:
输入一个正整数 M作为拉灯的次数 (1<M<100)
输出描述:
如果灯是点亮状态输出整数 “1”,如果灯是熄灭状态输出整数 “0”。
样例输入:
样例输出:
5
1
// 参 考 答 案 1
#include <iostream>
int main () {
int m;
std::cin >> m;
std::cout << m % 2 << std::endl;
}
1
2
3
4
5
6
7
// 参 考 答 案 2
#include <cstdio>
using namespace std;
int main () {
1
2
3
4
5
解析
答案 评分标准:
(下列各评分项单独计分,得分累加;共 18 个计分点)
6分:能正确输出一组数据;
6 分:能正确输出两组数据;
6 分:能正确输出三组数据。
第 2 题
问答题
数字组合
题目描述:
用户输入一个正整数 N(3<=N<=9)。从0到 N之间的所有正整数 (包含 0和 N) 中选择三个,组成一个三位数 (0不能
作为百位数 ),且这个三位数为奇数 ,请计算出共有多少种满足条件的三位数组合。 (注意 :组成的每个三位数各个
位上的数字不能重复 ;)
输入描述:
输入一个正整数 N(3<=N<=9)
输出描述:
输出满足条件的三位数组合的个数
样例输入:
样例输出:
样例描述:
用户输入的正整数为 3,也就是将 0,1,2,3四个数字进行组合,符合要求的三位数为:
103,123,203,213,201,231,301,321 共8个,所以输出 8。
int n;
scanf ("%d" , &n);
printf ("%d\n" , n % 2);
return 0;
}
6
7
8
9
10
3
8
// 参 考 答 案 1
#include <iostream>
int a[15], n, sum = 0;
bool vis[ 15];
void dfs (int step) {
if (step == 3 && a[step] % 2 == 1 && a[ 1] != 0) {
/*
for(int i=1; i<=step; i++)
{
1
2
3
4
5
6
7
8
9
10
解析
评分标准: (下列各评分项单独计分,得分累加;共 20 个计分点)
6分:能正确输出一组数据;
6 分:能正确输出两组数据;
8 分:能正确输出三组数据。
第 3 题
问答题
报数
题目描述:
有 n个人围成一个圈,从 1到 n按顺序排好号。然后从第一个人开始顺时针报数 (从 1到 3报数 ),报到 3的人退出圈
子后,后面的人继续从 1到 3报数,直到留下最后一个人游戏结束,问最后留下的是原来第几号。
输入描述:
输入一个正整数 n(4<n<600)
std::cout<<a[i];
}
std::cout<<" yes"<<std::endl;
*/
sum++;
}
for (int i = 0; i <= n; i++) {
if (!vis[i]) {
a[step + 1] = i;
vis[i] = true;
dfs(step + 1);
vis[i] = false;
}
}
}
int main () {
std::cin >> n;
dfs (0 );
std::cout << sum << std::endl;
}
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 参 考 答 案 2
#include <cstdio>
using namespace std;
int main () {
int n;
scanf ("%d" , &n);
int odd = n / 2 + n % 2;
printf ("%d\n" , odd * (n - 1) * (n - 1));
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
答案
输出描述:
输出最后留下的是原来的第几号
样例输入:
样例输出:
5
4
// 参 考 答 案 1
#include <iostream>
#include <queue>
int main () {
std::queue< int> queue;
int n, cnt = 1;
std::cin >> n;
for (int i = 1; i <= n; i++) {
queue. push(i);
}
while (queue. size() > 1) {
if (cnt != 3) {
queue. push(queue. front());
cnt++;
} else {
cnt = 1;
}
queue. pop();
}
std::cout << queue. front() << std::endl;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 参 考 答 案 2
#include <cstdio>
#include <cstring>
using namespace std;
int n, in, cur = 0, tmp = 1;
bool isIn[ 605];
int main () {
memset (isIn, true, sizeof (isIn));
scanf ("%d" , &n);
in = n;
while (in > 1) {
cur %= n;
if (!isIn[cur]) {
cur++;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
解析
评分标准: (下列各评分项单独计分,得分累加;共 25个计分点)
5分:能正确输出一组数据;
5 分:能正确输出两组数据;
7 分:能正确输
第12届蓝桥杯C++青少组中_高级组选拔赛2020年9月20日真题-附答案,第12届蓝桥杯青少组C++中高级组选拔赛真题及答案 2020年9月20日