立方和等式
时间: 1ms 内存:128M
描述:
考虑方程式:a^3 + b^3 = c^3 + d^3
其中:“^”表示乘方。a、b、c、d是互不相同的小于30的正整数。
这个方程有很多解。比如:
a = 1,b=12,c=9,d=10 就是一个解。因为:1的立方加12的立方等于1729,而9的立方加10的立方也等于1729。
当然,a=12,b=1,c=9,d=10 显然也是解。
如果不计abcd交换次序的情况,这算同一个解。
你的任务是:找到所有小于30的不同的正整数解。把a b c d按从小到大排列,用逗号分隔,每个解占用1行。比如,刚才的解输出为:
1,9,10,12不同解间的顺序可以不考虑。
输入:
输出:
示例输入:
示例输出:
1,9,10,12
2,9,15,16
2,18,20,24
10,19,24,27
提示:
参考答案(内存最优[800]):
#include<stdio.h>
inline double doub(double x,double y)
{
return (x-y)*(x-y);
}
int main()
{
double gx,gy,dx,dy;
while(scanf("%lf%lf%lf%lf",&gx,&gy,&dx,&dy)==4)
{
double x,y,resx,resy;
bool sign=0;
while(scanf("%lf%lf",&x,&y)==2)
if(!sign&&4*(doub(gx,x)+doub(gy,y))<=doub(dx,x)+doub(dy,y))
{
resx=x;resy=y;
sign=1;
}
if(sign)
printf("The gopher can escape through the hole at (%.3lf,%.3lf).\n",resx,resy);
else
printf("The gopher cannot escape.\n");
break;
}
return 0;
}
参考答案(时间最优[0]):
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int i;
int a1,a2,a3,a4;
int a[30];
for(i=1;i<30;i++)
{
a[i]=pow(i,3);
}
for(a1=1;a1<30;a1++)
{
for(a2=a1+1;a2<30;a2++)
{
for(a3=a2+1;a3<30;a3++)
{
for(a4=a3+1;a4<30;a4++)
{
if(a[a1]+a[a4]==a[a2]+a[a3])
{
cout<<a1<<','<<a2<<','<<a3<<','<<a4<<endl;
}
}
}
}
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。