生理周期 暴力枚举 C++

生理周期 暴力枚举 C++,第1张

生理周期 暴力枚举 C++

题目详情:

     

 思路简介:

 这也是一道很基础的枚举题,首先确定枚举变量,再确定枚举变量的范围和限制条件,再确定对枚举变量的 *** 作和判断。输入时给出四个日子,p,e,i,d。要求判断出在第四个日子后,三个特殊日子再次同一天的天数。最终的结果是以第四个日子为基准,输出相对于此过了多少天。所以可以以距离第四个日子过了多少天作为枚举变量,不妨设为k,k初始为d+1,过了多少天三个日子重合的最小天数,必须是23的倍数,也是28的倍数,同时也是33的倍数。提到最小,显然此处是涉及到三者的最小公倍数,不用一个个枚举。我们可以通过进一步的优化,来加快我们的查找,虽然这样的数据范围并不大,优化枚举范围和 *** 作对最终的结果区别不大,但这更重要的是一种习惯,一种追求能不能更优的习惯,这点在学习算法的过程中是非常重要的,如果只要求能过就行,那可能在算法学习的过程中是很难坚持下去的。话不多说,递上AC代码:

#include
using namespace std;
int main(){
	int a, b, c, d;
	int t, caseno = 0;
	while (cin >> a >> b >> c >> d && a != -1 ) {
		++caseno;
		int k;
		for (k = d + 1; (k - a) % 23; k++);//一重循环先找到d天之后相对于a天后的首次体力高峰期
		for (; (k - b) % 28; k += 23);//现在第k天是体力高峰期,判断其相对于b天后是否是首次情商高峰期,每次递增23,即体力高峰期的周期
		for (; (k - c) % 33; k += 23 * 28);//与上同理
		cout << "Case " << caseno <<
			" : the next triple peak occurs in " << k - d << " days." << endl;//按要求输出便可
	}
	

	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5713610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存