日期:2014-05-20 浏览次数:21272 次
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.