首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个算法题:觅一个最小的自然数x,使得:x=a*a*a+b*b*b=c*c*c+d*d*d

2011-11-30 
一个算法题:找一个最小的自然数x,使得:xa*a*a+b*b*bc*c*c+d*d*d找一个最小的自然数x,使它等于不同的两对

一个算法题:找一个最小的自然数x,使得:x=a*a*a+b*b*b=c*c*c+d*d*d
找一个最小的自然数x,使它等于不同的两对自然数的三次幂之和,即使得:
  x=a*a*a+b*b*b=c*c*c+d*d*d
其中a,b,c,d都是自然数,且有a!=c和b!=d
要求:输出满足要求的最小自然数的值。
请高手指教.

[解决办法]
把1,2,3。。。的立方计算出来放到一个数组中去,在这个数组里面找出满足条件的4个数。
[解决办法]
一个比较笨但很快就可以想到的办法.写一个for循环.

public class Test {
public static void main(String[] args) {
A: for(int x = 1; x < 50; ++x) //估算x的范围,假定在50范围中求
for(int a = 1; a <= x; ++a)
for(int b = 1; b <= x; ++b)
for(int c = 1; c <= x; ++c)
for(int d = 1; d <= x; ++d) {
if(a != c && b != d && (x == Math.pow(a, 3) + Math.pow(b, 3)) && (x == Math.pow(c, 3)+ Math.pow(d, 3))) {
System.out.println("Result is " + x);
break A;
}
}
}

[解决办法]
n1+n2=n3+n4
n3>n1 n4<n2 
n3<n1 n4>n2
循环要从2头向中间查找
[解决办法]
这个问题的条件还有点问题
a=d, b=c算不算?
如果a,b,c,d都不等,则可以推测
a<c<d<b
int[] findMixNum() {
int[] num = {0, 0, 0, 0, 0};
for (int a=0; ; a++) {
for (int c=a+1; ; c++) {
for (int d=c+1; ; d++) {
for (int c=d+1; ; b++) {
if (b*b*b >= Integer.MAX_VALUE-a*a*a) {
//超出整数范围
num[4] = 0;
return num;
}
num[4] = a*a*a + b*b*b;
if (c*c*c+d*d*d==num[4]) {
num[0] = a;
num[1] = b;
num[2] = c;
num[3] = d;
return num;
}
}
}
}
}
return num;
}

[解决办法]
没测试过
但是对yztommyhc 的做法表示怀疑
因为从数学的角度讲a[i] + a[low] == a[m] + a[n]是不完全正确的,比如a[m] + a[low] == a[i] + a[n]也是有可能的
[解决办法]

C# code
int max = 1290;            int[] Arr = new int[max];            for (int i = 0; i < max; i++)            {                Arr[i] = (i + 1) * (i + 1) * (i + 1);            }                         int a, b, c, d;            a = b = c = d = 0;            bool flag = true;            while (a < max - 3 && flag)            {                b = a + 1;                while (b < max - 2 && flag)                {                    c = b + 1;                    while (c < max - 1 && flag)                    {                        d = c + 1;                        while (d < max && flag)                        {                            if (Arr[a] - Arr[b] == Arr[c] - Arr[d])                            {                                Console.WriteLine(a + 1);                                Console.WriteLine(b + 1);                                Console.WriteLine(c + 1);                                Console.WriteLine(d + 1);                                Console.WriteLine(Arr[a] + Arr[d]);                                Console.WriteLine(Arr[b] + Arr[c]);                                flag = false;                            }                            d++;                        }                        c++;                    }                    b++;                }                a++;            }            Console.Read(); 


[解决办法]
mark
[解决办法]
9=1^3+2^3=2^3+1^3

a=1,b=2
c=2,d=1

a!=c,b!=d


可以证明不会有比9再小的了

[解决办法]
a!=c 
b!=d

那就a=d=1 c=b=2就是了 哈哈~~~

貌似跟编程无关哈~~~

你给的题不好`
[解决办法]
我觉得有点脑筋急转弯的味道

热点排行