2019年蓝桥杯省赛B组c++ABCD

A.组队

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

2019组队

分析与过程:

  1. 浏览图表可知,20位球员,5个位置,且17,18,号球员较为突出,现从中选5人,则要求各不相同。
  2. 一般思维是,选取各个号位的得分max球员,但7号占据3项max,此时如果立即计算,很容易错误
  3. 所以,在选的时候,可以取它的三次最大值,同时选择其他项最大值

直接计算max1,2,3, 比较得出,在17号取99的时候,得出了最大值,如图;

2019组队结果

正确答案:490

B.年号字串

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

分析与过程:

  1. 很容易想到26进制,给到的样例中没有提到0的表示,所以也无需去想
  2. 进位的时候常规操作就是,将源数字取模、相除再赋给它判断数字是否为零
  3. 此处52%26 = 0,的时候应该得Z,52/26得B出现错误,其他情况正常,
  4. 若将整除26的情况数字修改为n,n-1再除以26 ,则可以有避免这一问题;

用例代码:

//主函数调用mymath(2019);
void mymath(int year){	
	char s[26] = {'Z','A','B','C','D','E','F','G','H','I','G','K',
	'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y'};
	//定义一个字符数组,使用0-25 ,0便于进位
	string syear = "";
	int temp;
	while(year){
		temp = year % 26;
	
		if(temp == 0){
			year --;
		}
		year = year / 26; 
		syear = s[temp] + syear;
		//注意顺序问题,AZ,syear += s[temp],导致结果逆序 
	}
	cout << syear ;	

正确答案:BYQ

C.数列求值

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

分析与过程:

  1. 与菲波那契数列相关题目有相似 ,不算保留过程值,
  2. 可以想到直接计算这是一个非常庞大的数字,题目只要最后四位,可以将每次所得结果取模10000
  3. 可以借用规律,先模运算再相加,所得,等于先相加再模运算

用例代码:

//mymath(20190324);
void  mymath(int scale){
	long long  d1, d2, d3, d4; 
	 d1 = d2 = d3 = 1;
	for(int i = 4; i <= scale; i++){
		d4 = (d2 + d3 + d1) % 10000;
		d1 = d2;
		d2 = d3;
		d3 = d4; 
	} 
	cout << d4 << endl;
}

正确答案:4659

D.数的分解

2019 分解成3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?

注意:交换3个整数的顺序被视为同一种方法,例如1000+1001+18 和 1001+1000+18 被视为同一种。

分析与过程:

1.统计次数,不必求其具体数值,
2. bool函数,将处理结果传回符合则计数量++

用例代码:

bool fun(int num){//判断是否含有2或者4 
	int temp;
	while(num){
		temp  = num % 10;
		if(temp == 2 || temp == 4)
			return false;
		num = num / 10;
	}	
	return true;
}
void  mymath(int scale){
	int c , result = 0;	
	for(int a = 1; a < scale/3; a++){
		for(int b = 2; b < scale/2; b++){
			c = scale - a- b;
				if((c>b) && (b>a)&&fun(c)&&fun(a)&&fun(b))
				//三位数各不相同,且都不含有2和4						
					result ++;
				else 
					continue;			
		}
	}
	cout << result ;		
}

正确答案:40785


ps:小白上路,欢迎大家多多指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值