2019年第十届蓝桥杯大赛软件类省赛C/C++大学B组
试题 A:组队
本题总分:5分
【问题描述】
作为篮球队教练,你需要从以下名单中选出 1号位至 5号位各一名球员,
组成球队的首发阵容。
每位球员担任 1号位至 5号位时的评分如下表所示。请你计算首发阵容 1
号位至5号位的评分之和最大可能是多少?
答案:490(该题需考虑清楚,一个人不能担任两个位置,98+99+98+97+98=490)
试题 B:年号字串
本题总分:5分
【问题描述】
小明用字母 A对应数字 1,B对应 2,以此类推,用 Z对应 26。对于 27
以上的数字,小明用两位或更长位的字符串来对应,例如 AA对应27,AB对
应28,AZ对应52,LQ对应329。
请问2019对应的字符串是什么?
【问题描述】
小明用字母 A对应数字 1,B对应 2,以此类推,用 Z对应 26。对于 27
以上的数字,小明用两位或更长位的字符串来对应,例如 AA对应27,AB对
应28,AZ对应52,LQ对应329。
请问2019对应的字符串是什么?
答案:BYQ
(该题我做的时候是直接算了2019/26=77,AZ是52,所以BY对应77,2019%26=17,Q为17,所以答案为BYQ)
但该题考查的是26进制,代码如下
#include<iostream> #include<cstdio> using namespace std; int main(){ int x = 2019; while(x){ printf("%c", char(x%26+64)); x/=26; } return 0; } //结果取反
试题c:数列求值
本题总分:10分
【问题描述】
给定数列1,1,1,3,5,9,17,…,从第4项开始,每项都是前3项的和。求
第20190324项的最后4位数字
答案:4659
#include<iostream> #include<cstdio> using namespace std; int main(){ int a, b, c, d; a = b = c = 1;//前三项 for(int i = 4; i <= 20190324; i++){ d = (a+b+c)%10000;//控制后四位数 a = b; b = c; c = d; } printf("%d\n", d); return 0; }
试题 D:数的分解
本题总分:10分
【问题描述】
把 2019分解成 3个各不相同的正整数之和,并且要求每个正整数都不包
含数字2和4,一共有多少种不同的分解方法?
注意交换 3个整数的顺序被视为同一种方法,例如 1000+1001+18和
1001+1000+18被视为同一种。
【问题描述】
把 2019分解成 3个各不相同的正整数之和,并且要求每个正整数都不包
含数字2和4,一共有多少种不同的分解方法?
注意交换 3个整数的顺序被视为同一种方法,例如 1000+1001+18和
1001+1000+18被视为同一种。
#include<cstdio> #include<algorithm> #include<iostream> using namespace std; bool check(int x) //判断是否有2,4 { while(x) { if(x%10==2||x%10==4) return true; x/=10; } return false; } int main() { int cnt=0; for(int i=1;i<=2019;i++) { if(check(i)) continue; for(int j=i+1;j<=2019;j++) { if(check(j)) continue; int k=2019-i-j; if(k<=i||k<=j||check(k))continue; cnt+=1; } } cout<<cnt<<endl; return 0; }
其中i,j,k分别为三个整数,逐个模拟,边模拟边判断是否有数字2和4;
试题 F: 特别数的和
时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分
【问题描述】
小明对数位中含有 2、0、1、9 的数字很感兴趣 (不包括前导 0) ,在 1 到
40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到 n 中,所有这样的数的和是多少?
【输入格式】
输入一行包含两个整数 n。
【输出格式】
输出一行,包含一个整数,表示满足条件的数的和。
【样例输入】
40
【样例输出】
574
【评测用例规模与约定】
对于 20% 的评测用例,1 ≤ n ≤ 10。
对于 50% 的评测用例,1 ≤ n ≤ 100。
对于 80% 的评测用例,1 ≤ n ≤ 1000。
对于所有评测用例,1 ≤ n ≤ 10000。
时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分
【问题描述】
小明对数位中含有 2、0、1、9 的数字很感兴趣 (不包括前导 0) ,在 1 到
40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到 n 中,所有这样的数的和是多少?
【输入格式】
输入一行包含两个整数 n。
【输出格式】
输出一行,包含一个整数,表示满足条件的数的和。
【样例输入】
40
【样例输出】
574
【评测用例规模与约定】
对于 20% 的评测用例,1 ≤ n ≤ 10。
对于 50% 的评测用例,1 ≤ n ≤ 100。
对于 80% 的评测用例,1 ≤ n ≤ 1000。
对于所有评测用例,1 ≤ n ≤ 10000。
#include<cstdio> #include<algorithm> #include<iostream> using namespace std; int main() { int n,sum=0; cin>>n; for(int i=1;i<=n;i++) { if(i%10==1||i/10==1||i%10==2||i/10==2||i%10==9||i/10==9||i%10==0) sum+=i; } cout<<sum<<endl; }
试题 H: 等差数列
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
【问题描述】
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一
部分的数列,只记得其中 N 个整数。
现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有
几项?
【输入格式】
输入的第一行包含一个整数 N。
第二行包含 N 个整数 A 1 ,A 2 ,··· ,A N 。(注意 A 1 ∼ A N 并不一定是按等差数
列中的顺序给出)
【输出格式】
输出一个整数表示答案。
【样例输入】
5
2 6 4 10 20
【样例输出】
10
【样例说明】
包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、
18、20。
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1e5+10; int w[maxn]; int ans[maxn]; int main(){ int n; scanf("%d", &n); for(int i = 1; i <= n; i++){ scanf("%d", &w[i]); } if(w[1]==w[2]) //常数列的情况 { printf("%d", n); return 0; } sort(w+1, w+n+1);//先排序,从小到大 for(int i = 1; i < n; i++){ ans[i] = w[i+1]-w[i]; //依次算出两数之差 } int G = ans[1]; for(int i = 2; i <= n-1; i++){ G = gcd(G, ans[i]); } printf("%d\n", (w[n]-w[1])/G+1); return 0; }
emmmmm。。。。。。就先写这几道题吧,毕竟还是小菜一只,等我弄懂其他的再补吧。
总之这次比赛很粗心,水题都没做对更别说其他的了,不过我会努力的。