一道数字填空题
将1-8填入以上空格中,找出所有满足条件的组合。
分析:
数值范围:1234-8765
。利用枚举法,根据题意,乘数是5
,最后一位数必定是5
,所以可知,8765/5=1753
。即乘子最大也只能取到这个值,所以枚举范围是1234-1753.
也可以通过命令unique(floor((1234:8765)/5))
得到。
接下来进行循环过程遇到的问题即如何将四位数的各个位数独立成数。
这里有个小技巧,需要将字符串变成列向量,这样就可以变成单独的字符,如果是横向量的话,还是原数。
A = 1234;
num2str(A)’
4×1 char 数组
'1'
'2'
'3'
'4'
str2num(ans)
ans =
1
2
3
4
循环中的判断条件:
unique(vec)==8
, 即8个位数在除重以后还有8个不同数字,即1-8。与此同时,要避免数字中出现0,这样可以通过sum(vec8==0)==0
来判断。
结合起来:if (length(unique(vec8)) == 8) && ( sum(vec8==0)==0)
经过判断,可以得出所有满足条件的数字组合:
乘子:
1287 1297 1647 1729
结果:
6435 6485 8235 8645