葡萄糖 发表于 2014-8-10 17:42:23

找四位数

用1到8这八个自然数组成两个四位数(不可重复使用),其中一个四位数是另一个四位数的4倍,请问这两个四位数分别是_____?

zeroieme 发表于 2014-8-10 19:18:32

{1863,7452}
{1368,5472}

282842712474 发表于 2014-8-10 20:09:44

你想要代码还是人工推理呀

cn8888 发表于 2014-8-11 09:07:34

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}

chyanog 发表于 2014-8-11 11:20:40

Evaluate== FromDigits[{#5,#6,#7,#8}]]&/.Slot@i_:>#[]/.x_:>Compile[{},Select][]//AbsoluteTiming

wayne 发表于 2014-8-11 18:37:01

Select, {4}], Complement, #] == Sort]] &]

zeroieme 发表于 2014-8-12 01:35:03


前后数值还可以掐一点,不过这样思路清晰些。
Select,Union]==Range&]

还有,怎么简单推出最高位数不可能是2?

极至精细(极度复杂)控制循环的话
假设b=4a,确定a千位为1
a个位去1去5, 6种选择。并得b个位。
a十位 5种选择。并得b十位,检验后放行。
a千位 3种选择。a完全确定,检验打印。
小于 6*5*3=90

zeroieme 发表于 2014-8-12 01:49:05

Select,Floor,9],Union]==Range&]
关机前的灵光一闪


hujunhua 发表于 2014-8-12 16:40:59

可以手工枚举,备选数不多。由 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个,人力筛选可以胜任。

northwolves 发表于 2014-8-12 20:38:02

按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]
查看完整版本: 找四位数