今天GF面试居然有一道智力题。。如下:
1 2 3 4 5 6 7=91 中间填入+ - 让式子成立。
陆续想了三个解,然后我想验证一下所有解。。于是写了个小程序,用递归及中间变量构造所有组合
package test; //1 2 3 4 5 6 7=91 public class AlogSum { public void go(){ s = new int[6]; f(0); } void f(int index){ if( index == 6 ){ check(); return; } s[index] = 0; f(index+1); s[index] = 1; f(index+1); s[index] = -1; f(index+1); } void check(){ int tmp = 1; int k1 = 2; int sum = 0; boolean add = true; for(int i=0;i<=5;i++){ if( s[i] == 0){ tmp = tmp * 10 + k1; } else{ if(add){ sum+=tmp; } else sum-=tmp; if(s[i]==1) add = true; else if(s[i]==-1) add = false; tmp = k1; } k1++; } if(add==true){ sum+=tmp; } else sum-=tmp; if(sum == 91){ int k=1; System.out.print(k); for(int i=0;i<=5;i++){ if(s[i]==1){ System.out.print("+"); } else if(s[i]==-1){ System.out.print("-"); } k++; System.out.print(k); } System.out.println("=91"); } } int[] s = null; static public void main(String argvs[]){ AlogSum s = new AlogSum(); s.go(); System.out.println("finish"); } }
得出答案如下:
123-45+6+7=91
12+3+4+5+67=91
1+23+4+56+7=91