【第13届蓝桥杯】C/C++组B组省赛题目+详解

A.九进制转十进制

题目描述
九进制正整数(2022)9转换成十进制等于多少?

解:

2*9^0+2*9^1+2*9^3=2+18+1458=1478;

B.顺子日期

题目描述
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456等。顺子日期指的就是在日期的yyyymmdd表示法中,存在任意连续的三位数是一个顺子的日期。例如20220123就是一个顺子日期,因为它出现了一个顺子:123;而20221023则不是一个顺子日期,它一个顺子也没有。小明想知道在整个2022年份中,一共有多少个顺子日期。

题目解析:

我直接通过列举日期得出答案:但题目未说明012是不是顺子,如果不是则只有4个分别是20220123,20221123,20221230,20221231;如果是的话则有14个分别是:20220120,20220121,20220122,20220123,20220124,20220125,20220126,20220127,20220128,20220129,20221012,20221123,20221230,20221231。

C.刷题统计

题目描述
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。
他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。
请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?

输入格式
输入一行包含三个整数 a,b 和 n。

输出格式
输出一个整数代表天数。

数据范围
对于 50% 的评测用例,1≤a,b,n≤106,
对于 100% 的评测用例,1≤a,b,n≤1018。

输入样例:
10 20 99

输出样例:

8

题目解析:

因为n的值范围很大,如果通过一天一天的进行循环,会花费大量时间,甚至超时。因此,可以通过先计算出一周读的页数,然后算出一共需要完整的读几周,最后再计算多的几天。

代码如下:

#include

int main(){
	int a, b;
	long long int n, count=0, i, week;
	scanf("%d", &a);
	scanf("%d", &b);
	scanf("%lld", &n);
	
	week=a*5+b*2;
	
	long long int x=n/week;//记录多少周 
	count=count+x*7;
	
	n=n-x*week;
	//n=n%(5*a+b*2);	
	//printf("%d\n", n);
	if(n-a*5<=0&&n!=0){
		for(i=0;i<5;i++){
			n=n-a;
			count++;
			if(n<=0){
				break;
			}
		}
	}else if(n==0){
		count=count;
	}else{
		n=n-5*a;
		count=count+5;
		for(i=0;i<2;i++){
			n=n-b;
			count++;
			if(n<=0){
				break;
			}
		}
	}
	printf("%lld", count);
	return 0;
}

D.修剪灌木

题目描述
爱丽丝要完成一项修剪灌木的工作。
有 N 棵灌木整齐的从左到右排成一排。
爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为 0 厘米。
爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。
当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。
直到修剪了最左的灌木后再次调转方向。
然后如此循环往复。
灌木每天从早上到傍晚会长高 1 厘米,而其余时间不会长高。
在第一天的早晨,所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。

输入格式
一个正整数 N,含义如题面所述。

输出格式
输出 N 行,每行一个整数,第行表示从左到右第 i 棵树最高能长到多高。
数据范围
对于 30% 的数据,N≤10,
对于 100% 的数据,1

输入样例:

3     

 输出样例:

4

2

4

 题目解析:

本题需要找到规律,即灌木最高的情况是在刚剪完自己向离边缘最远的一边剪直到再回到自己,此时可以长到最高,即计算时计算离自己远的边缘的差值乘2。

代码如下:

#include
using namespace std;

int main() {
	int n, a[10001], i;
	cin>>n;

	for(i=1; i<=n/2; i++) {
		cout<<(n-i)*2<

你可能感兴趣的:(蓝桥杯历年真题,蓝桥杯,c++,c语言,算法,开发语言)