例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;
}
结果: