package cn.heima;
/**
* 求adc+de=ad+cde类似于这样问题
* @author Administrator
*思路:把其不同的5尾数先放入一数组中
*int a = 数组的前俩位
*int b = 数组的后三位
*而c,d则需要在数组中随机选
*/
public class Suanfa {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] n = new int[5];
long startTime = System.currentTimeMillis();
findThere(n,0);
long endTime = System.currentTimeMillis();
System.out.println((endTime-startTime)/1000f +"秒");
}
public static void findThere(int[] n,int i) {
// TODO Auto-generated method stub
if(i==5){
findAll(n);
return;
}else{ // 把其放入5位大小的数组中放入数各不相同
for(int j=0;j<=9;j++){
boolean flag = false;//设置一标记来判断是否上一位以有
for(int k=0;k<i;k++){
if(n[k]==j){
flag = true;
break;
}
}
if(flag) continue;//有就跳过
n[i]=j;
findThere(n,i+1);//接下来在下一位加入数据
}
}
}
public static void findAll(int[] n) { //用来判断是否存在ab+cde=ac+dbe
// TODO Auto-generated method stub
int a = Integer.parseInt(""+n[0]+n[1]);//从上次存入的数组中拿出前两位
if((a+"").length()!=2) return; //如果拿出的数没有两位像 04 就直接return
// System.out.println("a="+a);
int b = Integer.parseInt(""+n[2]+n[3]+n[4]);//从上次存入数组中来出后3位
// System.out.println("b="+b);
if((b+"").length()!=3) return; //如果拿出的数据没有3位像012就直接return
int[] k = new int[5]; //用来保存存储的下标
int[] f = new int[5]; //用来保存存储的数据
gg(n,k,f,0);
int c = Integer.parseInt(""+f[0]+f[1]);
if((c+"").length()!=2) return;
int d = Integer.parseInt(""+f[2]+f[3]+f[4]);
if((d+"").length()!=3) return;
if(a==c&&b==d||a==d&&b==c) return;
if((a+b)==(c+d))
System.out.println(a+"+"+b+"="+c+"+"+d);
return;
}
public static void gg(int[] n,int[] k, int[] f, int i) {
// TODO Auto-generated method stub
if(i==5){
return;
}
for(int j=0;j<5;j++){//由于数据数组只有5位所以其下标为0-4
boolean flag = false;//设置标记来判断是否以有
for(int s=0;s<i;s++){
if(k[s]==j){
flag=true;
break;
}
}
if(flag)continue;//如果有跳过
k[i]=j;
f[i]=n[j];
gg(n,k,f,i+1);//在来确定下一位
}
}
}
/**
* 求adc+de=ad+cde类似于这样问题
* @author Administrator
*思路:把其不同的5尾数先放入一数组中
*int a = 数组的前俩位
*int b = 数组的后三位
*而c,d则需要在数组中随机选
*/
public class Suanfa {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] n = new int[5];
long startTime = System.currentTimeMillis();
findThere(n,0);
long endTime = System.currentTimeMillis();
System.out.println((endTime-startTime)/1000f +"秒");
}
public static void findThere(int[] n,int i) {
// TODO Auto-generated method stub
if(i==5){
findAll(n);
return;
}else{ // 把其放入5位大小的数组中放入数各不相同
for(int j=0;j<=9;j++){
boolean flag = false;//设置一标记来判断是否上一位以有
for(int k=0;k<i;k++){
if(n[k]==j){
flag = true;
break;
}
}
if(flag) continue;//有就跳过
n[i]=j;
findThere(n,i+1);//接下来在下一位加入数据
}
}
}
public static void findAll(int[] n) { //用来判断是否存在ab+cde=ac+dbe
// TODO Auto-generated method stub
int a = Integer.parseInt(""+n[0]+n[1]);//从上次存入的数组中拿出前两位
if((a+"").length()!=2) return; //如果拿出的数没有两位像 04 就直接return
// System.out.println("a="+a);
int b = Integer.parseInt(""+n[2]+n[3]+n[4]);//从上次存入数组中来出后3位
// System.out.println("b="+b);
if((b+"").length()!=3) return; //如果拿出的数据没有3位像012就直接return
int[] k = new int[5]; //用来保存存储的下标
int[] f = new int[5]; //用来保存存储的数据
gg(n,k,f,0);
int c = Integer.parseInt(""+f[0]+f[1]);
if((c+"").length()!=2) return;
int d = Integer.parseInt(""+f[2]+f[3]+f[4]);
if((d+"").length()!=3) return;
if(a==c&&b==d||a==d&&b==c) return;
if((a+b)==(c+d))
System.out.println(a+"+"+b+"="+c+"+"+d);
return;
}
public static void gg(int[] n,int[] k, int[] f, int i) {
// TODO Auto-generated method stub
if(i==5){
return;
}
for(int j=0;j<5;j++){//由于数据数组只有5位所以其下标为0-4
boolean flag = false;//设置标记来判断是否以有
for(int s=0;s<i;s++){
if(k[s]==j){
flag=true;
break;
}
}
if(flag)continue;//如果有跳过
k[i]=j;
f[i]=n[j];
gg(n,k,f,i+1);//在来确定下一位
}
}
}