昨天我的小伙伴可能太无聊了,然后给我一道题:输入1~8,每个数字不重复,问正确结果是什么?
这道题不难,把纵横计算式写出来(一共6个),1~8全排列摆放在上面的8个空位上,有几个解就是几种答案,没有解说明此题有误。
我们可以构建这个函数为:
1int func(int a[]) 2{ 3int b=0;//是否有误 4if(!b && a[2]%a[5] !=0)b=1; 5 6if(!b && a[0]+a[1]-9!=4)b=1; 7if(!b && a[2]-a[3]*a[4] !=4)b=1; 8if(!b && a[5]+a[6]-a[7] !=4)b=1; 9if(!b && a[0]+a[2]/a[5] !=4)b=1; 10if(!b && a[1]-a[3]*a[6] !=4)b=1; 11if(!b &&9-a[4]-a[7] !=4)b=1; 12return b; 13 }
如果a[] 数组中的数不能满足如图所示的运算公式,将返回1,能满足将返回0
下面就是如何获取1~8的全排序了,这个方法有很多,以下方法是书中常见的全排序方法。