求adc+de=ad+cde类似于这样问题

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);//在来确定下一位
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值