一道小智力题~

今天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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值