乘法运算 (九)

2014-11-24 10:43:46 · 作者: · 浏览: 3
flag = isDup(lis.get(i),lis2.get(j)); // 判断是否重复
if(flag) break; // 如果元素重复,直接跳出这层循环,测试下个数据
}
if(!flag){
lis2.add(lis.get(i)); // 不重复,则添加
kinds = kinds +1;
}
}
}
// 检测,并添加符合的组合
public static void check(int[] n){
int a = n[0]*10+n[1];
int b = n[2]*10+n[3];
int c = n[4]*10+n[5];
int d = n[6]*100+n[7]*10+n[8];
if(a*b==c*d){
lis.add(Arrays.copyOf(n, n.length));
}
}
// 全排列
public static void f(int[] n,int start,int end){
if(start>=end){
check(n); // 检测,并添加符合的组合
return ;
}else{
for(int i=start;i int temp = n[start];
n[start] = n[i];
n[i] = temp;
f(n,start+1,end);
temp = n[start];
n[start] = n[i];
n[i] = temp;
}
}
}
public static void main(String[] args){
int[] n = {1,2,3,4,5,6,7,8,9};
f(n,0,n.length-1);
removeDuplicate(); // 去除重复元素
print(); // 输出结果
System.out.println("kinds:"+kinds); // 输出个数
}
}

/*----------------------------------黄金分隔线---------------------------*/

//其实题目要求左边的两个乘数交换算同一方案,不要重复输出!
//即由对称性可知,求出所有组合,然后除以2即为所求答案
//所以程序可以省略去重函数public static void removeDuplicate()
//程序代码可化简为:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class 乘法运算 {
static List lis = new ArrayList();
static int kinds;
// 检测,并添加符合的组合
public static void check(int[] n){
int a = n[0]*10+n[1];
int b = n[2]*10+n[3];
int c = n[4]*10+n[5];
int d = n[6]*100+n[7]*10+n[8];
if(a*b==c*d){
lis.add(Arrays.copyOf(n, n.length));
kinds++;
}
}
// 全排列
public static void f(int[] n,int start,int end){
if(start>=end){
check(n); // 检测,并添加符合的组合
return ;
}else{
for(int i=start;i int temp = n[start];
n[start] = n[i];
n[i] = temp;
f(n,start+1,end);
temp = n[start];
n[start] = n[i];
n[i] = temp;
}
}
}
public static void main(String[] args){
int[] n = {1,2,3,4,5,6,7,8,9};
f(n,0,n.length-1);

System.out.println("kinds:"+kinds/2); // 输出个数
}
}