第十五届蓝桥杯模拟赛第一期(C/C++组)

题目解析为原创可能有误 仅供参考!!!

同时为了避免篇幅太长并没有给出太详细题解(大多数只是给出了模板)!!!

试题A

请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。
  请将这个数的十进制形式作为答案提交。
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

其实这道题目凭感觉都能猜到答案是aaa转换为十进制为2730;
#include<iostream>
using namespace std;
bool find(int x)
{
	while(x)
	{
		int t=x%16;
		x/=16;
		if(t<10)return false;//一旦某一位不是a~f就不符合
	}
	return true;
}
int main()
{
	for(int i=2022;i<=1e9;++i)//从2022开始暴力枚举
		if(find(i))
		{
			cout<<i<<endl;
			break;
		}
	}
	return 0;
}
输出2730

试题B

在 Excel 中,列的名称使用英文字母的组合。前 26 列用一个字母,依次为 A 到 Z,接下来 26*26 列使用两个字母的组合,依次为 AA 到 ZZ。
  请问第 2022 列的名称是什么?
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个由大写字母组成的字符串,在提交答案时只填写这个字符串,填写多余的内容将无法得分。

经过计算26+26*26=702;26+26*26+26*26*26=18278;
所以答案一定是三个字符;
可以注意到每经过26*26个字符第一个字符加1;
每经过26个字符第二个字符加1;
每经过1个字符第三个字符加1;
​
​
#include<iostream>
using namespace std;
int main()
{
	cout<<2022-702<<endl;//从ZZ开始往后数1320个;
	cout<<1320/26/26+1<<' '<<(1320-26*26)/26+1<<' '<<1320%26<<endl;//从1开始不是0--1320%26为零是Z
	//2  25  20----BYT
	return 0;
}

试题C

对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 1900 年 1 月 1 日至 9999 年 12 月 31 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。
 例如,2022年11月13日满足要求,因为 2+0+2+2=(1+1)+(1+3) 。
  请提交满足条件的日期的总数量。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

#include<iostream>
using namespace std;
int res;
int a[]={0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年 ;
int b[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//平年 ;
//下表映射到一所以第一个放0; 
bool is_year(int x)
{//判断是否为闰年 
	if(x%100!=0&&x%4==0||x%400==0) return true;
	return false;
}
bool cal(int x)
{
	int t=x;
	int cnt1=0,cnt2=0;//cnt1统计年份数字和 
	while(t)//cnt2统计月份日数字和 
	{
		if(t%10) cnt1+=t%10;
		t/=10;
	}
	for(int i=1;i<=12;++i)
	{
		if(is_year(x))//是闰年走if否则走else 
		{
			int t=0;
			t=i*100;
			for(int j=1;j<=a[i];++j)
			{
				t+=j;
				int tmp=t;
				while(tmp)
				{
					if(tmp%10) cnt2+=tmp%10;
					tmp/=10;
				}
				if(cnt1==cnt2) res++;//满足条件 
				t-=j;
				cnt2=0//恢复原样 
			}
		}
		else
		{
			int t=0;
			t=i*100;
			for(int j=1;j<=b[i];++j)
			{
				t+=j;
				int tmp=t;
				while(tmp)
				{
					if(tmp%10) cnt2+=tmp%10;
					tmp/=10;
				}
				if(cnt1==cnt2) res++;
				t-=j;
				cnt2=0;
			}
		}
	}
}
int main()
{
	for(int i=1900;i<=9999;++i)
	{
		cal(i);
	}
	cout<<res<<endl;
	return 0;
}
输出70910

试题D 

小蓝有 30 个数,分别为:99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 。
小蓝可以在这些数中取出两个序号不同的数,共有 30*29/2=435 种取法。请问这 435 种取法中,有多少种取法取出的两个数的乘积大于等于 2022 。 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

​
#include<iostream>
using namespace std;
int a[30];
int res;
//99 22 51 63 72 61 20 88 40 21 63 30 11 18 99 12 93 16 7 53 64 9 28 84 34 96 52 82 51 77
//可以直接复制没有多余空格 
int main()
{
	for(int i=0;i<30;++i) cin>>a[i];
	
	for(int i=0;i<29;++i)
	{
		for(int j=i+1;j<30;++j)
		{
			if(a[i]*a[j]>=2022) res++;
		}
	}
	cout<<res<<endl;
	return 0;
}
输出189

试题E

        小蓝有一个 30 行 60 列的数字矩阵,矩阵中的每个数都是 0 或 1 。
110010000011111110101001001001101010111011011011101001111110
010000000001010001101100000010010110001111100010101100011110
001011101000100011111111111010000010010101010111001000010100
101100001101011101101011011001000110111111010000000110110000
010101100100010000111000100111100110001110111101010011001011
010011011010011110111101111001001001010111110001101000100011
101001011000110100001101011000000110110110100100110111101011
101111000000101000111001100010110000100110001001000101011001
001110111010001011110000001111100001010101001110011010101110
001010101000110001011111001010111111100110000011011111101010
011111100011001110100101001011110011000101011000100111001011
011010001101011110011011111010111110010100101000110111010110
001110000111100100101110001011101010001100010111110111011011
111100001000001100010110101100111001001111100100110000001101
001110010000000111011110000011000010101000

### 第15蓝桥杯C/C++省赛B真题概述 第15蓝桥杯C/C++省赛B的比赛难度有所提升,旨在更全面地评估参赛者的编程能力和逻辑思维能力。以下是该赛事的部分典型题目及其解题思路: #### 握手问题 此题可以通过两种方法求解: - **合数学**:利用排列合的知识计算可能的握手次数。 - **暴力枚举**:通过遍历所有可能性来统计握手情况。 #### 小球反弹 对于小球反弹的问题,主要关注的是物理运动学中的反射原理以及边界条件处理[^2]。 #### 好数算法 采用暴力解法即可解决问题,并且在此场景下不会导致超时现象发生。具体实现涉及对给定范围内的整数逐一检验其是否满足特定性质。 #### R格式转换 R格式相关题目通常涉及到字符串操作或者模式匹配等内容,在解答这类问题时需注意输入输出格式的要求严格遵循题目描述。 #### 宝石合 应用唯一分解定理作为核心理论依据来进行设计解决方案,重点在于如何有效地将大数值拆分成若干质因数乘积形式并据此构建合理的算法框架。 #### 数字接龙游戏 运用深度优先搜索(DFS)策略探索所有可行路径直至找到符合条件的结果序列为止;期间要注意剪枝优化以提高效率减少不必要的运算量。 #### 拔河比赛安排 考虑团队成员力量分配均衡性等因素影响最终胜负关系,从而制定相应的模拟过程或贪心法则指导下的决策流程。 以上即为部分公开可得之第15蓝桥杯C/C++省赛B试题概览及对应解析方向。 ```cpp // 示例代码片段展示了一个简单的好数判断程序 #include <iostream> using namespace std; int main(){ int n; cin >> n; bool isGoodNumber = true; while(n != 0){ int digit = n % 10; if(digit == 3 || digit == 4 || digit == 7){ isGoodNumber = false; break; } n /= 10; } cout << (isGoodNumber ? "Yes" : "No") << endl; return 0; } ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值