c语言 枚举——完美立方、生理周期

例1:完美立方

形如a^3 = b^3 + c^3 + d^3的等式被称为完美立方等式。例如123=63 +83 +103。编写一个程序,对任给的正整数N(N≤100),寻找所有的四元组(a,b, c d),使得a^3 = b^3 + c^3 + d^3,其中a, b, c,d 大于1,小于等于N,且b<=c<=d。

要求:

输入

一个正整数N (N≤100)。

输出

每行输出一个完美立方。输出格式为: Cube = a, Triple = (b,c, d)
其中a,b,c,d所在位置分别用实际求出四元组值代入。

代码:

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int a,b,c,d;
	for(a=2;a<=n;a++)	//a,b,c,d均大于1,且b<=c<=d
	{
		for(b=2;b<a;b++)
		{
			for(c=b;c<a;c++)
			{
				for(d=c;d<a;d++)
				{
					if(a*a*a==b*b*b+c*c*c+d*d*d)
					{
						printf("Cube = %d, Triple = (%d,%d,%d)\n",a,b,c,d);
					}
				}
			}
		}
	}
	return 0;
} 

结果:

在这里插入图片描述

例2:生理周期

人有体力、情商、智商的高峰日子,它们分别每隔 23天、28 天和33天出现一次。
对于每个人,我们想知道何时三个高峰落在同一天。
给定三个高峰出现的日子p, e和i (不一定是第一次高峰出现的日子), 再给定另一个指定的日子d。
你的任务是输出日子d 之后,下一次三个高峰落在同一天的日子(用距离d 的天数表示)。
例如: 给定日子为10,下次出现三个高峰同一天的日子是12,则输出2。

要求:

输入

输入四个整数: p,e, i 和 d。p,e,i 分别表示体力、情感和智力高峰出现的日子。d 是给定的日子,可能小于p,e 或 i 。
所有给定日子是非负的并且小于或等于365,所求的日子小于或等于21252。

输出

从给定日子起,下一次三个高峰同一天的日子 的天数)

代码:

#include<stdio.h>
int main()
{
	int p,e,i,d;
	scanf("%d%d%d%d",&p,&e,&i,&d);
	int x,n;
	for(n=1;n<=21252;n++)	//从1到21252枚举每一天
	{
		if((n+d-p)%23==0&&(n+d-e)%28==0&&(n+d-i)%33==0)	
		//符合体力、情感和智力三高峰的一天
		{
			printf("%d",n);
			break;
		}
	}
	return 0;
} 

代码优化:

#include<stdio.h>
int main()
{
	int p,e,i,d;
	scanf("%d%d%d%d",&p,&e,&i,&d);
	int x,n;
	for(n=1;(n+d-p)%23;n++);	//先找出体力高峰
	for(;(n+d-e)%28;n+=23);	//在体力高峰的日子中找情感高峰
	for(;(n+d-i)%33;n+=23*28);	//在体力和情感双高峰的日子里找智力高峰
	printf("%d",n);
	return 0;
} 

结果:

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值