进位的算法

    匪警请拨110,即使手机欠费也可拨通!

    为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!

    某批警察叔叔正在进行智力训练:

    1 2 3 4 5 6 7 8 9 = 110;

    请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。

    请你利用计算机的优势,帮助警察叔叔快速找到所有答案。

    每个答案占一行。形如:

12+34+56+7-8+9
123+4+5+67-89
......

    已知的两个答案可以输出,但不计分。
    
    各个答案的前后顺序不重要。

   注意:

    请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
    
    请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。
    
    相关的工程文件不要拷入。
    
    请不要使用package语句。
    
    源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。

public class Demo14 {  
    // 遍历所有情况   
    public static void fun(String s) {  
        char[] c = s.toCharArray();  
        StringBuffer sb = new StringBuffer();   // 记录 组成的式子   
        int len = s.length()-1; // 字符串长度 - 1       
        int[] sign = new int[len];  // sign用来标记符号, 最多有(s的长度-1)个符号   
        // 从后身前添加符号   
        while(sign[0]<3){    // 最前面的判定符号的值若 >=3 则结束循环    
            sb.append(c[0]);    // 添加首元素   
            for(int i=0;i<len;i++){  
                if(sign[i]==1){     // 值为1添加"+"号   
                    sb.append("+");  
                }else if(sign[i]==2){// 值为2添加"-"号   
                    sb.append("-");  
                }  
                sb.append(c[i+1]);  // 不管添加不添加+-号,都添加后一个元素   
            }  
              
            check(sb.toString());   // 验证并输出   
              
            sb.setLength(0);    // 清空sb   
            sign[len-1]++;  // 每循环一次,最后一个符号值加1   
            for(int i=len-1;i>0;i--){    //当值等于3时,实现逢3进位   
                if(sign[i]==3){  
                    sign[i] = 0;    // sign[i] 归零   
                    sign[i-1]++;    // sign[i-1]进位   
                }  
            }  
        }  
    }  
    // 验证并输出   
    public static void check(String str){  
        String[] s = str.split("[\\+]|[-]");    // 得到全部数字   
        String sign = str.replaceAll("\\d*", "");   // 得到全部符号(+-)   
        int sum = Integer.parseInt(s[0]);   // 把第一个数字给sum   
        for(int i=0;i<s.length-1;i++){  
            switch(sign.charAt(i)){  
                case '+':   
                    sum += Integer.parseInt(s[i+1]);  
                    break;  
                case '-':   
                    sum -= Integer.parseInt(s[i+1]);  
                    break;  
            }  
        }  
        if(sum==110){   // 符合条件输出   
            System.out.println(str);  
        }  
    }  
    // 主函数   
    public static void main(String[] args){  
        String s = "123456789";  
        fun(s);  
    }  
}  

以上代码是 :   http://blog.csdn.net/hanshileiai/article/details/8724255   这个人是个大神。

package com.zh.test1;

public class Test6 {

    /**
     * 经常用的位数
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int gins[]=new int[3];  //数的进位  3 是代表位数
        //System.out.println(gins[0]);
        while(gins[0]<3){
            gins[gins.length-1]++;  //最后一位数
            for(int i=gins.length-1;i>0;i--){
                if(gins[i]==3){    //这里这个是一个3进制数
                    gins[i]=0;
                    gins[i-1]++;
                }
            }
            for(int i=0;i<gins.length;i++){
                System.out.print(gins[i]+"  ");
            }
            System.out.println();
        }
    }
    
}

 

posted on 2014-03-03 20:39  邵邵  阅读(718)  评论(0编辑  收藏  举报

淘宝美工兼职招聘