日期:2014-05-20 浏览次数:20959 次
public class Test{ public static void main(String args[]){ String str="123456789"; char[] chars = str.toCharArray(); int[] array = new int[8]; StringBuffer sb = new StringBuffer(); while(array[0]<3){ sb.append(chars[0]); for(int k=0;k<chars.length-1;k++){ if(array[k]==1){ sb.append("+"); } else if(array[k]==2){ sb.append("-"); } sb.append(chars[k+1]); } if(parse(sb.toString())){ System.out.println(sb.toString()); } sb.setLength(0); array[7]++; for(int i=7;i>0;i--){ if(array[i]==3){ array[i]=0; array[i-1]++; } } } } private static boolean parse(String str) { String[] str1 = str.split("[\\+]|[-]"); String str2 = str.replaceAll("\\d*",""); int sum = 0; sum = Integer.parseInt(str1[0]); for(int i=0;i<str1.length-1;i++){ switch(str2.charAt(i)){ case '+': sum+=Integer.parseInt(str1[i+1]); break; case '-': sum -=Integer.parseInt(str1[i+1]); break; } } if(sum==110){ return true; } return false; } }
------解决方案--------------------
while语句遍历用的00000000相当于3进制,开始00000001,初始位没循环一次+1,当到3是,重置0位,下一位+1,其实就是3进制遍历的过程。然后0代表没有,1代表"+",2代表"-"。接着到了parse方法,我没考虑效率,先把符号插进去,在通过符号位把数据分裂出来,当然我没怎么考虑效率,只是为了自己方便一点写代码。其实有了那个数组就能分离数据了。接着计算表达式的值是不是110.