蓝桥杯备赛第一周
第一题:跑步训练
问题描述
小明要做一个跑步训练,初始时,小明充满体力,体力值计为 10000。
如果小明跑步,每分钟损耗 600 的体力。
如果小明休息,每分钟增加 300 的体力。
体力的损耗和增加都是 均匀变化的。
小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。
如果某个时刻小明的体力到达 0,他就停止锻炼, 请问小明在多久后停止锻炼。
为了使答案为整数,请以秒为单位输出答案,答案中只填写数,不填写单位。
答案提交
这是一道结果填空题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
#include<iostream>
using namespace std;
//第一题,跑步训练
int main()
{
int total = 10000;
int i = 0, j = 0,sum = 0;//i用于记录跑步的时间,j用来记录休息的时间
while (total > 0)
{
if(total >600)
{
i += 60;
total -= 600;
total += 300;
j += 60;
}
else
{
i += total /10;
total = 0;
break;
}
}
sum = i + j;//sum存放总秒数
cout << "小明在" << sum << "秒后停止训练" << endl;
system("pause");
}
运行结果如下:
第二题:阶乘约数
问题描述
定义阶乘 n! = 1 × 2 × 3 × ··· × n。
请问 100! (100 的阶乘)有多少个约数。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
必备数学知识:
若正整数n可分解为p1a1*p1a2*…pk^ak
其中pi为两两不同的素数,ai为对应指数,则n的约数个数为(1+a1)(1+a2)…(1+ak)
例如
180=22335=22*325
180的约数个数为(1+2)(1+2)*(1+1)=18个。
#include<iostream>
using namespace std;
int NUM = 100;
int a[101];//用于存放质约数的数组
void resolve(int num)//求出1-100的每个数的质约数,并存放在数组中
{
int i = 2;//有2,就不会再出现2的倍数
while (i <= num)
{
if (num % i == 0)
{
a[i]++;//类似桶排序,把这些质约数出现的次数储存起来
num /= i;//不停除掉质约数,直到num变成1
if (num == 1)
{
return;//返回主函数的for循环,主函数的i变为2,3,4,5,6。。到100
}
}
else
{
i++;//如果不能变成1,就继续除以更大的质约数
}
}
}
int main()
{
int i;
for (i = 2; i <= NUM; i++)
{
resolve(i);
}
long long count = 1;//初始化一个很大的长整型,用于存放最终结果
for (int j = 2; j <= NUM; j++)
{
if (a[j])//如果对应的数字出现过,就乘起来
{
count *= a[j] + 1;
}
}
cout << count << endl;
system("pause");
}
程序执行结果:
第三题:出栈次序
问题描述
X星球特别讲究秩序,所有道路都是单行线。
一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行。
路边有个死胡同,只能容一辆车通过,是临时的检查站,如图所示。
X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查。
如果车辆进入检查站和离开的次序可以任意交错。
那么,该车队再次上路后,可能的次序有多少种?
为了方便起见,假设检查站可容纳任意数量的汽车。
显然,如果车队只有1辆车,可能次序1种;2辆车可能次序2种;3辆车可能次序5种。
现在足足有16辆车啊,亲!需要你计算出可能次序的数目。
答案提交
这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性文字)。
#include<iostream>
using namespace std;
int f(int n, int m)//m是车站内的车的数量,n是未入站的车的数量
{
if (n == 0)
{
return 1;//车已经全部进站
}
if (m == 0)
{
return f(n - 1, 1);
}
if (m > 0)
{
return f(n - 1, m + 1) + f(n, m - 1);
}
}
int main()
{
cout<<f(16,0);
system("pause");
}
运行结果如下:
第四题:哥德巴赫猜想
【问题描述】
哥德巴赫猜想认为:不小于4的偶数都可以表示为两个素数的和。
你不需要去证明这个定理,但可以通过计算机对有限数量的偶数进行分解,验证是否可行。
实际上,一般一个偶数会有多种不同的分解方案,我们关心包含较小素数的那个方案。
对于给定数值范围,我们想知道这些包含较小素数方案中最大的素数是多少。
比如,100以内,这个数是19,它由98的分解贡献。
你需要求的是10000以内,这个数是多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容无法得分。
第五题:图书排列
【问题描述】
将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置。
请计算一共有多少种不同的排列方案。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容无法得分。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int ans = 0, a[] = { 1,2,3,4,5,6,7,8,9,10 };
do {
if (abs(a[0] - a[1]) == 1 || abs(a[1] - a[2]) == 1 || abs(a[2] - a[3]) == 1 || abs(a[3] - a[4]) == 1 || abs(a[4] - a[5]) == 1 || abs(a[5] - a[6]) == 1 || abs(a[6] - a[7]) == 1 || abs(a[7] - a[8]) == 1 || abs(a[8] - a[9]) == 1)
continue;
ans++;
} while (next_permutation(a, a + 10));//next_permutation是全排列的函数,形式记住
cout << ans << endl;
return 0;
}
运行结果如下:
第六题:猴子分香蕉
【问题描述】
5只猴子是好朋友,在海边的椰子树上睡着了。这期间,有商船把一大堆香蕉忘记在沙滩上离去。
第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉 。
第2只猴子醒来,重新把香蕉均分成5堆,还剩下2个,就吃掉并把自己的一份藏起来继续睡觉。
第3只猴子醒来,重新把香蕉均分成5堆,还剩下3个,就吃掉并把自己的一 份藏起来继续睡觉。
第4只猴子醒来,重新把香蕉均分成5堆,还剩下4个,就吃掉并把自己的一份藏起来继续睡觉。
第5只猴子醒来,重新把香蕉均分成5堆,哈哈,正好不剩!
请计算一开始最少有多少个香蕉。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容无法得分。