立方和等式 (三)

2014-11-24 10:33:32 · 作者: · 浏览: 2
2], 3);
int d = (int)Math.pow(n[3], 3);
if(a+b==c+d){
int[] temp = new int[]{n[0],n[1],n[2],n[3]};
Arrays.sort(temp); // 排序
if(check(lis,temp)){// 不重复,添加
lis.add(temp);
}
}
}
static void f(int m,int start,int end)
{
if(start==end)
{
if(check(a)){
oper(a);
}
return;
}
else
{
for(int i=1;i {
if(!vis[start])//没有赋值
{
a[start]=i;
vis[start]=true;
f(m,start+1,end);
vis[start]=false;
}
}
}
}


public static void main(String[] args) {
int m = 30;
int n = 4;
f(m,0,n);
print(lis);
}
}
方法二
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
public class 立方和等式 {
// 输出
private static void print(List lis) {
for (int[] i : lis) {
for (int j : i)
System.out.print(j + " ");
System.out.println();
}
}

public static boolean check(List lis, int[] n) {
if (lis.size() == 0) {
return true;
} else {
for (int i = 0; i < lis.size(); i++) {
int j;
for (j = 0; j < n.length; j++) {
if (lis.get(i)[j] != n[j]) {
break;
}
}
if (j == n.length)
return false;
}
}
return true;
}

private static void f(List lis) {
for (int i = 0; i < 30; i++) {
for (int j = 0; j < 30; j++) {
for (int k = 0; k < 30; k++) {
for (int m = 0; m < 30; m++) {
if (i == j || i == k || i == m || j == k || j == m
|| k == m)
continue;
int a = (int) Math.pow(i, 3);
int b = (int) Math.pow(j, 3);
int c = (int) Math.pow(k, 3);
int d = (int) Math.pow(m, 3);
if (a + b == c + d) {
int[] temp = new int[] { i, j, k, m };
Arrays.sort(temp); // 排序
if (check(lis, temp)) {// 不重复,添加
lis.add(temp);
}
}
}
}
}
}
}

public static void main(String[] args) {
List lis = new ArrayList();
f(lis); // 得到结果
print(lis); // 输出
}
}
运行结果
1,9,10,12
2,9,15,16
2,18,20,24
10,19,24,27