游客 Signup | Login
中文 | En

3713 - 立方和问题

 

<span style="font-size:22pt;"><span>•</span></span><span style="font-family:宋体;color:black;font-size:22pt;">考虑方程式:</span><span style="font-family:Arial;color:black;font-size:22pt;">a^3 + b^3 = c^3 + d^3</span><span style="font-family:Arial;color:black;font-size:22pt;"> </span>

<span style="font-size:22pt;"><span>•</span></span><span style="font-family:宋体;color:black;font-size:22pt;">其中:“</span><span style="font-family:Arial;color:black;font-size:22pt;">^</span><span style="font-family:Arial;color:black;font-size:22pt;">”表示乘方。</span><span style="font-family:Arial;color:black;font-size:22pt;">a</span><span style="font-family:宋体;color:black;font-size:22pt;">、</span><span style="font-family:Arial;color:black;font-size:22pt;">b</span><span style="font-family:宋体;color:black;font-size:22pt;">、</span><span style="font-family:Arial;color:black;font-size:22pt;">c</span><span style="font-family:宋体;color:black;font-size:22pt;">、</span><span style="font-family:Arial;color:black;font-size:22pt;">d</span><span style="font-family:宋体;color:black;font-size:22pt;">是互不相同的小于</span><span style="font-family:Arial;color:black;font-size:22pt;">30</span><span style="font-family:宋体;color:black;font-size:22pt;">的正整数。</span>

<span style="font-size:22pt;"><span>•</span></span><span style="font-family:宋体;color:black;font-size:22pt;">这个方程有很多解。比如:</span>

<span style="font-size:22pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:22pt;">a = 1</span><span style="font-family:宋体;color:black;font-size:22pt;">,</span><span style="font-family:Arial;color:black;font-size:22pt;">b=12</span><span style="font-family:宋体;color:black;font-size:22pt;">,</span><span style="font-family:Arial;color:black;font-size:22pt;">c=9</span><span style="font-family:宋体;color:black;font-size:22pt;">,</span><span style="font-family:Arial;color:black;font-size:22pt;">d=10 </span><span style="font-family:宋体;color:black;font-size:22pt;">就是一个解。因为:</span><span style="font-family:Arial;color:black;font-size:22pt;">1</span><span style="font-family:宋体;color:black;font-size:22pt;">的立方加</span><span style="font-family:Arial;color:black;font-size:22pt;">12</span><span style="font-family:宋体;color:black;font-size:22pt;">的立方等于</span><span style="font-family:Arial;color:black;font-size:22pt;">1729</span><span style="font-family:宋体;color:black;font-size:22pt;">,而</span><span style="font-family:Arial;color:black;font-size:22pt;">9</span><span style="font-family:宋体;color:black;font-size:22pt;">的立方加</span><span style="font-family:Arial;color:black;font-size:22pt;">10</span><span style="font-family:宋体;color:black;font-size:22pt;">的立方也等于</span><span style="font-family:Arial;color:black;font-size:22pt;">1729</span><span style="font-family:宋体;color:black;font-size:22pt;">。</span>

<span style="font-size:22pt;"><span>•</span></span><span style="font-family:宋体;color:black;font-size:22pt;">当然,</span><span style="font-family:Arial;color:black;font-size:22pt;">a=12</span><span style="font-family:宋体;color:black;font-size:22pt;">,</span><span style="font-family:Arial;color:black;font-size:22pt;">b=1</span><span style="font-family:宋体;color:black;font-size:22pt;">,</span><span style="font-family:Arial;color:black;font-size:22pt;">c=9</span><span style="font-family:宋体;color:black;font-size:22pt;">,</span><span style="font-family:Arial;color:black;font-size:22pt;">d=10 </span><span style="font-family:宋体;color:black;font-size:22pt;">显然也是解。</span>

<span style="font-size:22pt;"><span>•</span></span><span style="font-family:宋体;color:black;font-size:22pt;">如果不计</span><span style="font-family:Arial;color:black;font-size:22pt;">abcd</span><span style="font-family:宋体;color:black;font-size:22pt;">交换次序的情况,这算同一个解。</span>

<span style="font-size:22pt;"><span>•</span></span><span style="font-family:宋体;color:black;font-size:22pt;">你的任务是:找到所有小于</span><span style="font-family:Arial;color:black;font-size:22pt;">30</span><span style="font-family:宋体;color:black;font-size:22pt;">的不同的正整数解。把</span><span style="font-family:Arial;color:black;font-size:22pt;">a b c d</span><span style="font-family:宋体;color:black;font-size:22pt;">按从小到大排列,用逗号分隔,每个解占用</span><span style="font-family:Arial;color:black;font-size:22pt;">1</span><span style="font-family:宋体;color:black;font-size:22pt;">行。比如,刚才的解输出为:</span>

1,9,10,12

Input

Output

Examples

Input


                

Output


                

Solution C

#include <stdio.h>
#define  N 29
#define  M 4
void perms(int p[],int start)
{
	int i,t;
	if(start==M)
	{
		if((p[0]<p[1])&&(p[0]<p[2])&&(p[2]<p[3])&&(p[0]*p[0]*p[0]+p[1]*p[1]*p[1]==p[2]*p[2]*p[2]+p[3]*p[3]*p[3]))
				printf("%d,%d,%d,%d\n",p[0],p[2],p[3],p[1]);
		return;
	}
	for(i=start;i<N;i++)// 注意i从start开始,不从0开始哦
	{
		t=p[i];p[i]=p[start];p[start]=t;//交换
		perms(p,start+1);//递归
		t=p[i];p[i]=p[start];p[start]=t;//交换回来
	}
}
int main()
{
	int i,p[N];
	for(i=0;i<N;i++) p[i]=i+1;//数组赋初值		
	perms(p,0);//从数组中索引号为0的元素开始进行排列
	return 0;
}

Solution C++

#include<iostream>
#include<cmath>
using namespace std;
#define N 4
void F(int a[],int start)
{
	int i,j,t;
	if(start==N)
	{
		int x=pow(a[0],3);
		int y=pow(a[1],3);
		int z=pow(a[2],3);
		int w=pow(a[3],3);
		if(a[2]>a[1]&&a[3]>a[2]&&a[1]>a[0]&&((x+y)==(w+z)||(x+z)==(w+y)||(x+w)==(z+y)) ){cout<<a[0]<<','<<a[1]<<','<<a[2]<<','<<a[3]<<endl;}
		return;
	}
	for(i=start;i<30;i++)
	{
		
		swap(a[start],a[i]);
		F(a,start+1);
		swap(a[start],a[i]);
	    
	  
	}
}
int main()
{
	int p[30];
	int i;
	for(i=0;i<29;i++)
    	p[i]=i+1;
	F(p,0);
	
	return 0;
}
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题