zl程序教程

您现在的位置是:首页 >  其它

当前栏目

蓝桥杯每日一刷(第一天)

每日 蓝桥 第一天 一刷
2023-06-13 09:15:52 时间

文章目录


前言

距离蓝桥杯还剩短短俩个月的时间,最后的号角已经吹响,没有撤退可言!

最后的时间如果要彻底的搞懂比赛所需的算法,很难,但是最后的成绩可能也不是很好,所以我们用真题+解析的形式来做最后的冲刺!

话不多说,开启我们的第一天!

2015年b组:奖券数目

有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。 请提交该数字(一个整数),不要写任何多余的内容或说明性文字。

思路:不要4,在5位数中剔除4即可,枚举,累加没有4的,下面我们用代码来实现一下这个操作、

#include<iostream>
using namespace std;
//筛选出不含4的数
bool check(int x) {
	while (x) {
		if (x % 4 == 0)
			return false;
		x /= 10;
	}
	return true;
}
int main()
{
	int sum = 0;//定义数目
	for (int i = 10000; i <= 99999; i++) {
		if (check(i))	sum++;
	}
	cout << sum;
	return 0;
}

或者拆开来看

#include<iostream>
using namespace std;
int main()
{
	int cnt = 0;
	for (int a = 1; a <= 9; a++)
	{
		if (a != 4)
			for (int b = 0; b <= 9; b++)
			{
				if (b != 4)
					for (int c = 0; c <= 9; c++)
					{
						if (c != 4)
							for (int d = 0; d <= 9; d++)
							{
								if (d != 4)
									for (int e = 0; e <= 9; e++)
									{
										if (e != 4)
											cnt++;
									}
							}
					}
			}
	}
	cout << cnt << endl;
    return 0;
}

2015b 星系炸弹

在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。 有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。

请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19 请严格按照格式书写。不能出现其它文字或符号。

实际上在蓝桥杯中碰到时间问题填空的情况下,excel是最简单的,我们先来用excel来得出结果,最后再用代码实现一遍

不怕你们笑话我,答案是2017-08-05,定时1000天,看比如,所以说不要在这里踩坑,下面我们看代码实现

#include<iostream>
using namespace std;
//判断平年闰年
int days[13] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
bool check(int x) {
	if (x % 400 == 0 || (x % 100 != 0 && x % 4 != 0)) {
		return true;
	}
	return false;
}
int main() {
	bool is_run = false;
	int y = 2014, m = 11, d = 9;
	for (int i = 1; i <= 1001; i++) {
		d++;
		if (m == 2) {
			if (is_run) {
				if (d >= 29) m++, d = 0;
			}
			else {
				if (d >= 28) m++, d = 0;
			}

		}
		else if (d >= days[m - 1]) m++, d = 0;
		if (m > 12) {
			y++;
			m = 1;
			is_run = check(y);
		}
	}
	printf("%d-%02d-%02d", y, m, d);
	return 0;
}

2015 b 三羊献瑞

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。 请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

思路:乍一看没有思路,我们仔细来看(纯废话……) 填空题,没有任何的限制,直接暴力吧,后面我们再看,要脑子的算法

#include<iostream>
using namespace std;
int main()
{
	int a,b,c,d,f,g,h;
	int numOne,numTwo,sum;
	for(a=2;a<=9;a++)
	{
		for(b=0;b<=9;b++)
		{
			for(c=0;c<=9;c++)
			{
				for(d=0;d<=9;d++)
				{
					for(f=0;f<=9;f++)
					{
						for(g=0;g<=9;g++)
						{
							for(h=0;h<=9;h++)
							{
								if(a!=b && a!=c && a!=d && a!=f && a!=g && a!=h
								&& b!=c && b!=d && b!=f && b!= g &&b!=h
								&& c!=d && c!=f && c!= g && c!=h
								&& d!=f && d!=g &&d!=h
								&& f!=g && f!=h
								&& g!=h
								&& a!=1 && b!=1 && c!=1 && d!=1 && f!=1 && g!=1 && h!=1)
								{
									numOne=a*1000 + b*100 + c*10 + d;
									numTwo=1*1000 + f*100 + g*10 + b;
									sum=1*10000 + f*1000 + c*100 + b*10 + h;
									if(sum==(numOne + numTwo))
									{
										cout<<1<<f<<g<<b<<endl;
									}						
								}	
							}							
						}
					}
				}
			}
		}		
	}
	return 0;
} 

我们把每个数字都带进去进行一个简单的推导

#include<iostream>
using namespace std;
int main() {
	for (int b = 2; b <= 6; b++) {
		for (int d = 2; d <= 7; d++) {
			if (d == b)	continue;
			if (d == b + 1) continue;
			if (b + d <= 10)	continue;
			int h = b + d - 10;
			if (h == b || h == d || h == b + 1)	continue;
			printf("%d%d%d%d\n", 1, 0, 8, b);
		}
	}
	return 0;
}

最后

今天我们就刷这几个题,题不算难,但是都是真题,坚持下去,时间会给出答案!