日期:2014-05-20 浏览次数:21014 次
import java.util.*;
public class Test {
public static void main(String[] args) throws Throwable {
int[] num = {1,2,3,4,5,6,7,8,9};
int[] gp = new int[4];
Set<String> dup = new HashSet<String>();
String key;
for (List<Integer> list : parade(num, num.length)) {
for (int i=1, j=0; i<6; i+=2) {
gp[j++] = list.get(i-1) * 10 + list.get(i);
}
gp[3] = list.get(6)*100 + list.get(7)*10 + list.get(8);
if (gp[0]*gp[1] == gp[2]*gp[3]) {
if (gp[0] > gp[1]) {
key = String.format("%d * %d", gp[1], gp[0]);
} else {
key = String.format("%d * %d", gp[0], gp[1]);
}
if (! dup.contains(key)) {
System.out.printf("%s = %d * %d\n", key, gp[2], gp[3]);
dup.add(key);
}
}
}
}
public static List<List<Integer>> parade(int[] num, int n) { //排列组合
List<List<Integer>> result = new ArrayList<List<Integer>>();
if (num==null || num.length==0 || n==0) return result;
if (n > num.length) n = num.length;
if (n==1) {
for (int i=0; i<num.length; i++) {
List<Integer> list = new ArrayList<Integer>();
list.add(num[i]);
result.add(list);
}
return result;
}
for (int i=0; i<num.length; i++) {
int[] sub = new int[num.length-1];
for (int j=0, k=0; j<num.length; j++) {
if (j!=i) sub[k++] = num[j];
}
for (List<Integer> list : parade(sub, n-1)) {
list.add(0, num[i]);
result.add(list);
}
}
return result;
}
}
------解决方案--------------------
楼上是牛人啊。我在网上找了一个排列组合的例子,我自己都还没看懂呢。先拿过来用,再好好看看
package com.practice;
import java.util.ArrayList;
import java.util.List;
public class Guess3 {
public static void main(String[] args) {
List<Integer> s=new ArrayList<Integer>();
List<Integer> rs=new ArrayList<Integer>();
for(int i=1;i<=9;i++)
s.add(i);
fun(s,rs);
}
public static void fun(List<Integer > s,List<Integer> rs){
int a,b,c,d;
if(s.size()==1){
rs.add(s.get(0));
a=10*rs.get(0)+rs.get(1);
b=10*rs.get(2)+rs.get(3);
c=10*rs.get(4)+rs.get(5);
d=100*rs.get(6)+10*rs.get(7)+rs.get(8);
if(a*b==c*d && a<b)
{
System.out.println(a+"x"+b+"="+c+"x"+d);
}
rs.remove(rs.size()-1);
}else{
for(int i=0;i<s.size();i++){
rs.add(s.get(i));
List<Integer> tmp = new ArrayList<Integer>();
for(Integer ts:s)
tmp.add(ts);
tmp.remove(i);
fun(tmp,rs);
rs.remove(rs.size()-1);
}
}
}
}