2019(第十届)蓝桥杯省赛 C/C++ B组 真题及解析

试题 A: 组队

【问题描述】
作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容。
每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1号位至 5 号位的评分之和最大可能是多少?
在这里插入图片描述

(如果你把以上文字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 team.txt,内容与上面表格中的相同,请注意第一列是编号)

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

题解

答案:490

本题很简单可以直接手算,找到每列最高分数,且做到不重复就可以,有重复可选择次高分数,方案有多种,如下图:
1号位~5号位分别可选:
97、99、99、97、98(蓝色)
98、99、98、97、98(绿色)
97、99、98、98、98(红色)
在这里插入图片描述

试题B:年号字串

【问题描述】
小明用字母A对应数字1,B对应2,以此类推,用Z对应26。对于27以上的数字,小明用两位或更长位的字符串来对应,例如AA对应27,AB对应28,AZ对应52,LQ对应329。
请问2019对应的字符串是什么?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个大写英文字符串,在提交答案时只填写这个字符串,注意全部大写,填写多余的内容将无法得分。

题解

答案:BYQ
这道题目实际就是一个将十进制转换为26进制

#include <iostream>
using namespace std;

char str[27] = {
   0,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

int main(){
   
	int n;
	string ans;
	cin >> n;
	
	while(n){
   
		ans += str[n % 26];
		n /= 26;
	}
	
	int len = ans.length();
	for(int i=len-1; i>=0; i--)
		cout << ans[i];
	
	return 0;
}

试题 C: 数列求值

【问题描述】
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求第 20190324 项的最后 4 位数字。

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个 4 位整数(提示:答案的千位不为 0),在提交答案时只填写这个整数,填写多余的内容将无法得分。

题解

答案:4659
本题类似斐波那契数列,但最后的数值可能会很大,所以我们需要在每一步都余10000,且每步余并不会改变其最后结果,如:

12345 + 12346% 10000 = 24691 % 10000 = 469112345 % 10000+12346 %10000= 4691

前后结果不变。

#include <iostream>
using namespace std;

const int mod = 1e4;
long long f[20190327]; 

int main(){
   
	f[1] = f[2] = f[3] = 1;
	
	for(int i=4; i<=20190324; i++){
   
		f[i] = (f[i-1] + f[i-2] + f[i-3]) % mod;
	}
	
	cout << f[20190324] << endl;;
	return 0;
}

试题 D: 数的分解

【问题描述】
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和1001+1000+18 被视为同一种。

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

题解

答案:40785

直接暴力即可

#include <iostream>
using namespace std;

bool check(int num)
{
   
    while (num)
    {
   
        if (num%10==2||num%10==4)
            return true;
        num/=10;
    }
    return false;
}
int main() {
   
    int res = 0;
    
    for (int i 
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值