找四位数
用1到8这八个自然数组成两个四位数(不可重复使用),其中一个四位数是另一个四位数的4倍,请问这两个四位数分别是_____? {1863,7452}{1368,5472} 你想要代码还是人工推理呀 Clear["Global`*"];(*Clear all variables*)
Do[n4=n*4;
nd=IntegerDigits@n;
n4d=IntegerDigits@n4;
If==Range,Print[{n,n4}]],
{n,1000,2500}]
{1368,5472}
{1863,7452} Evaluate== FromDigits[{#5,#6,#7,#8}]]&/.Slot@i_:>#[]/.x_:>Compile[{},Select][]//AbsoluteTiming Select, {4}], Complement, #] == Sort]] &]
前后数值还可以掐一点,不过这样思路清晰些。
Select,Union]==Range&]
还有,怎么简单推出最高位数不可能是2?
极至精细(极度复杂)控制循环的话
假设b=4a,确定a千位为1
a个位去1去5, 6种选择。并得b个位。
a十位 5种选择。并得b十位,检验后放行。
a千位 3种选择。a完全确定,检验打印。
小于 6*5*3=90 Select,Floor,9],Union]==Range&]
关机前的灵光一闪
闪 可以手工枚举,备选数不多。由 a+4a≡1+2+…+8(mod9)→a≡0(mod9),并且1+2+…+8=36,易得a和4a的各位数字之和都是18.由此可得a的备选数集:
1278,1287,1728,1782,1827,1872,2178,2187这一组容易全部淘汰,因4{2,7,8}≡{8,8,2}(mod10). 2,7,8做个位数都使a与4a有重复数字。
1368,1386,1638,1683,1836,1863
1458,1548,1584,1854 (5不能做个位数,舍去2个)
1467,1647 (4和6不能做个位数,故其它4个排列舍去)
还剩12个,人力筛选可以胜任。
按hujunhua的思路:
4的倍数后两位:12,16,24,28,32,36,48,52,56,64,72,76,84
a={1,2,7,8},4a={3,4,5,6}:4a只能是4356,4536,5364,此时a=1089,1134,1341 矛盾
a={1,3,6,8},4a={2,4,5,7},4a只能是4572,4752,5472,5724,7452,7524,此时a=1143,1188,1368,1436,1863,1881,有两个相符
a={1,4,5,8},4a={2,3,6,7}:4a只能是6372,6732,7236,此时a=1593,1683,1909 矛盾
a={1,4,6,7},4a={2,3,5,8}:4a只能是5328,5832,8532,此时a=1432,1458,2134 矛盾
页:
[1]