日期:2014-05-20 浏览次数:20865 次
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); } } } }