Crystal的【思特奇杯·云上蓝桥-算法集训营】第1周作业

蓝桥杯备赛第一周

第一题:跑步训练

问题描述
小明要做一个跑步训练,初始时,小明充满体力,体力值计为 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堆,哈哈,正好不剩!
请计算一开始最少有多少个香蕉。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容无法得分。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值