[蓝桥杯 2023 国 B] 子 2023 / 双子数
题目描述
A 子 2023
小蓝在黑板上连续写下从 到 之间所有的整数,得到了一个数字序列:
小蓝想知道 中有多少种子序列恰好等于 ?
提示,以下是 种满足条件的子序列(用中括号标识出的数字是子序列包含的数字):
注意以下是不满足条件的子序列,虽然包含了 、、、 四个数字,但是顺序不对:
B 双子数
若一个正整数 可以被表示为 ,其中 、 为质数且 ,则 是 一个 “双子数”。请计算区间 内有多少个 “双子数”?
输入格式
输入一个大写字母,表示第几个问题。
输出格式
根据所输入的问题编号,输出对应问题的答案。
提示
答题模板,可供参考。
#include<iostream>
using namespace std;
int main() {
string ans [] = {
"The answer of task A", // 双引号中替换为 A 题的答案
"The answer of task B", // 双引号中替换为 B 题的答案
};
char T;
cin >> T;
cout << ans[T - 'A'] << endl;
return 0;
}
第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 A、B 题
思路
首先定义一个字符串数组ans,其中包含两个元素,分别是两个问题的预计算答案。然后定义一个字符变量T,并从标准输入获取一个大写字母。这个字母对应于问题的编号。
接下来,利用ASCII码的特性,通过T - 'A'计算出输入字母对应的数组索引。例如,如果输入的是A,那么T - 'A'的结果就是0,对应于数组ans的第一个元素。如果输入的是B,那么T - 'A'的结果就是1,对应于数组ans的第二个元素。
最后,通过cout将查询到的答案输出到标准输出。
注意
这不是这道题的完整解法。你需要另外编写程序算出答案后,再用这个方法提交答案。A题可以用动态规划解决,B题可以用质数筛解决。
AC代码
#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;
int main() {
string ans[] = {
"5484660609", // 双引号中替换为 A 题的答案
"947293", // 双引号中替换为 B 题的答案
};
char T;
cin >> T;
cout << ans[T - 'A'] << endl;
return 0;
}