前言
距离蓝桥杯还剩短短俩个月的时间,最后的号角已经吹响,没有撤退可言!
最后的时间如果要彻底的搞懂比赛所需的算法,很难,但是最后的成绩可能也不是很好,所以我们用真题+解析的形式来做最后的冲刺!
话不多说,开启我们的第一天!
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;
}
最后
今天我们就刷这几个题,题不算难,但是都是真题,坚持下去,时间会给出答案!