目录
2012 第一题:微生物增殖
题目描述
假设有两种微生物X和Y,X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。一个新出生的X,半分钟之后吃掉1个Y,且从此开始每隔1分钟吃掉1个Y。已知新出生的X=10,Y=89,求60分钟后Y的数目。若X=10,Y=90呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。
题目分析
从题目中知道Y是每2分钟分裂一次,所以我们只要知道X的变化,每次X吃掉Y的数目后面算出来就可以了,这个也可以叫做控制变量法,从X得出Y.
本题需要从前几次的分裂情况可以发现X暗藏的规律,1小时有120个半分钟,我列了一个表格如下:
从上面表格可以分析出不论是新出生的还是以前的X,都是每半分钟进行吃Y的操作,每3分钟进行一次分裂,故这题的操作如下
在60分钟内进行判断:
1.如果为每个0.5分钟,除2余1, Y=Y-X
2.如果为每个3分钟,被6整除, X=X*2
3.如果为每个2分钟,被4整除,Y=Y*2
题目代码
#include<iostream>
using namespace std;
int main()
{
int x = 10, y = 89;
for(int i = 1; i <=120; i++)
{
if(i%2==1)
{
y = y - x;
}
if(i%4== 0)//2分钟有4个0.5
{
y =y* 2;
}
if(i%6==0)//3分钟有6个0.5
{
x = x*2;
}
}
cout << "x = "<< x << endl <<"y = "<< y;
return 0;
}
题目答案
x = 10485760
y = -979369984//表示微生物Y为0,灭绝
2013第一题:高斯日记
题目描述
大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210。后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于1777年4月30日,在高斯发现的一个重要定理的日记上标注着5343,因此可算出那天是1791年12月15日。高斯获得博士学位的那天日记上标着8113,请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd,例如:1980-03-21
题目分析
首先确定发生事件的年份,就是用总的天数减去每年天数
然后确定在该年的月份以及日期。
题目代码
#include <iostream>
using namespace std;
//判断闰年
bool leap_year(int year)
{
return (year%400==0)||((year%4==0)&&(year%100!=0));
}
//yearday 这一年的天数,num 除年以外的总天数
int main()
{
int n;
cin >>n;
//1777-04-30;
int num = n+31+28+31+30-1;
int days[13]= {0,31,0,31,30,31,30,31,31,30,31,30,31};
int year = 1777,month=0,day =0;
int yearday;
while(1)
{
if(leap_year(year))
{
yearday=366;
}
else
{
yearday=365;
}
if(num<yearday)
{
break;
}
num=num -yearday;
year ++;
}
//闰年二月
if(leap_year(year))
{
days[2]=29;
}
else
{
days[2]=28;
}
month=1;
for(int i=1; i<=12; i++)
{
if(num>days[i])
{
num =num-days[i];
month++;
}else break;
}
cout<<year<<"-"<<month<<"-"<<num;
// cout<<year<<"-";
// if(month<10)
// cout<<"0"<<month<<"-";
// else cout<<month<<"-";
// if(day<10)
// cout<<"0"<<day;
// else cout <<day;
return 0;
}
题目答案
1799-07-16
2014第一题:啤酒和饮料
题目描述
啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
题目分析
简单的循环暴力,两层循环就可
题目代码
#include <iostream>
using namespace std;
int main()
{
//x为啤酒,y为饮料
for(int x=1; x<823/23; x++)
{
for(int y=1; y<823/19; y++)
{
if(23*x+19*y==823)
{
if(x<y)
{
cout << x <<ends << y <<endl;
}
}
}
}
return 0;
}
题目答案
啤酒 11
2015第一题:奖券数目
题目描述
有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。
请提交该数字(一个整数),不要写任何多余的内容或说明性文字。
题目分析
暴力手法,5层循环,脱了裤子放屁
题目代码
#include <iostream>
using namespace std;
int main()
{
int num =0;
for(int i=1; i<9; i++)
{
for(int j=1; j<10; j++)
{
for(int k=1; k<10; k++)
{
for (int m=1; m<10; m++)
{
for(int n=1; n<10; n++)
{
num++;
}
}
}
}
}
cout<<num;
return 0;
}
题目答案
52488
2016 第一题:煤球数目
题目描述
有一堆煤球,堆成三角棱锥形。具体:第一层放1个,第二层3个(排列成三角形),第三层6(排列成三角形),第四层10个(排列成三角形),…如果一共有100层,共有多少个煤球?
请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
题目分析
该题目是一个模拟题,首先找出他的规律
第一层 1
第二层 1+2
第三层 1+2+3
第四层 1+2+3+4
可以看出他的规律了,就是依次加,最后的要求是求全部的煤球数
题目代码
#include <iostream>
using namespace std;
int main()
{
//sum表示总煤球数,temp表示每层的数目
int sum =0,temp=0;
for (int i=1; i<=100; i++)
{
temp=temp+i;
sum = sum+temp;
}
cout << sum << endl;
return 0;
}
题目答案
171700
2017第一题:购物单
题目描述
小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场物。小明很厌烦,但又不好推辞。
这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。小明也有个怪癖不到万不得已,从不刷卡,直接现金搞定。现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。
取款机只能提供100元面额的纸币。小明想尽可能少取些现金,够用就行了。 你的任务是计算出,小明最少需要取多少现金。以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。
以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。
-----------------
**** 180.90 88折
**** 10.25 65折
**** 56.14 9折
**** 104.65 9折
**** 100.30 88折
**** 297.15 半价
**** 26.75 65折
**** 130.62 半价
**** 240.28 58折
**** 270.62 8折
**** 115.87 88折
**** 247.34 95折
**** 73.21 9折
**** 101.00 半价
**** 79.54 半价
**** 278.44 7折
**** 199.26 半价
**** 12.97 9折
**** 166.30 78折
**** 125.50 58折
**** 84.98 9折
**** 113.35 68折
**** 166.57 半价
**** 42.56 9折
**** 81.90 95折
**** 131.78 8折
**** 255.89 78折
**** 109.17 9折
**** 146.69 68折
**** 139.33 65折
**** 141.16 78折
**** 154.74 8折
**** 59.42 8折
**** 85.44 68折
**** 293.70 88折
**** 261.79 65折
**** 11.30 88折
**** 268.27 58折
**** 128.29 88折
**** 251.03 8折
**** 208.39 75折
**** 128.88 75折
**** 62.06 9折
**** 225.87 75折
**** 12.89 75折
**** 34.28 75折
**** 62.16 58折
**** 129.12 半价
**** 218.37 半价
**** 289.69 8折
--------------------
题目分析
将数据复制到excel中,数据->分列,把88折这些手动改成0.88这些,用product函数,再用sum函数。
题目答案:
5200
2018第一题:第几天
题目描述
2000年的1月1日,是那一年的第1天。
那么,2000年的5月4日,是那一年的第几天?
注意:需要提交的是一个整数,不要填写任何多余内容。
题目分析
1.能被4整除,且不能被100整除的,是闰年。2.世纪年份能被400整除的是闰年。
((year%4==0)&&(year%100!=0))||(year%400==0)
直接手算吧,历届蓝桥杯算日期中最简单的一道题,一三五七八十腊,31天。其余30,闰年二月29,普通28;
题目代码
#include<iostream>
using namespace std;
int main()
{
//首先2000年是闰年 2月29天
int ans = 31+29+31+30+4;
cout << ans <<endl;
return 0;
}
题目答案
125
2019第一题:组队
题目描述
作为篮球队教练,你需要从以下名单中选出 1号位至 5号位各一名球员,组成球队的首发阵容。每位球员担任 1号位至 5号位时的评分如下表所示。请你计算首发阵容 1号位至5号位的评分之和最大可能是多少?
1 97 90 0 0 0
2 92 85 96 0 0
3 0 0 0 0 93
4 0 0 0 80 86
5 89 83 97 0 0
6 82 86 0 0 0
7 0 0 0 87 90
8 0 97 96 0 0
9 0 0 89 0 0
10 95 99 0 0 0
11 0 0 96 97 0
12 0 0 0 93 98
13 94 91 0 0 0
14 0 83 87 0 0
15 0 0 98 97 98
16 0 0 0 93 86
17 98 83 99 98 81
18 93 87 92 96 98
19 0 0 0 89 92
20 0 99 96 95 81
题目分析
把数据复制到excel表格
题目答案
490
2020第一场 第一题:跑步训练
题目描述
小明要做一个跑步训练。
初始时,小明充满体力,体力值计为 10000 。如果小明跑步,每分钟损耗 600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是均匀变化的。
小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。如果某个时刻小明的体力到达 0 ,他就停止锻炼。
请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。答案中只填写数,不填写单位。
题目分析
由题意,在每个2分钟里,消耗300,由于在每个2分钟后是消耗,因此体力在出现小于600时,在接下来的1分钟内,体力就会消耗殆尽,在 32个两分钟,也就是64分钟时,体力剩余400。
题目代码
#include <iostream>
using namespace std;
int main()
{
int n=10000;
int run = 600/60;//跑步时每秒的消耗
int time=0;
while(n)
{
if(n-600<0)
{
time=time+n/run;
break;
}
n=n-600;
n=n+300;
time=time+120;
}
cout<<time;
return 0;
}
2020第二场 第一题:门牌制作
题目描述
小蓝要为一条街的住户制作门牌号。这条街一共有2020位住户,门牌号从1到2020编号。小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017需要依次粘贴字符1、0、1、7,即需要1个字符0,2个字符1,1个字符7。请问要制作所有的1到2020号门牌,总共需要多少个字符2?
题目分析
暴力搜索,判断每个位置的字符是否满足条件
题目代码
#include <iostream>
using namespace std;
//判断每一个数中有多少个2
//法一:非递归
int judge(int num)
{
int counter=0;
while(num)
{
if(num%10==2)
{
counter++;
}
num =num/10;
}
return counter;
}
//法二:递归
int shu=0;
void much_two(int n){
if(n==0){
return;
}
if(n%10==2){
shu++;
}
if(n){
n=n/10;
}
much_two(n);
}
int main()
{
int sum=0;
for(int i=1; i<=2020; i++)
{
// 法一
sum = sum+judge(i);
// 法二
much_two(i);
}
cout<<"法一:"<<sum<<endl;
cout<<"法二:"<<shu;
return 0;
}
题目答案
624
第一题: 解密
题目描述
小明设计了一种文章加密的方法:对于每个字母 c,将它变成某个另外的字符 Tc。下表给出了字符变换的规则:
例如,将字符串 YeRi 加密可得字符串 EaFn。
小明有一个随机的字符串,加密后为:EaFnjISplhFviDhwFbEjRjfIBBkRyY
(由 30 个大小写英文字母组成,不包含换行符),请问原字符串是多少?
(如果你把以上字符串和表格复制到文本文件中,请务必检查复制的内容
是否与文档中的一致。在试题目录下有一个文件 str.txt,第一行为上面的字符
串,后面 52 行依次为表格中的内容。)
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
只包含 30 个大小写英文字母的字符串,在提交答案时只填写这个字符串,填写
多余的内容将无法得分。
题目分析
题目答案
YeRikGSunlRzgDlvRwYkXkrGWWhXaA