立方和等式

立方和等式

时间: 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;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注