cg372101 发表于 2013-8-13 21:11:26

复原算式

   ■ ■ ■
×   ■ ■ ■
   ■ ■ ■
  ■ ■ ■
 ■ ■ ■  
 ■ ■ ■ ■ ■

上面算式中,每个“■”代表1个数字,共20个“■”代表20个数字。仅知 0~9 这十个数字在上面算式中的出现每个都不多于2次。请还原此算式。

gxqcn 发表于 2013-8-14 10:54:43

由于三位数样本数不多,
虽然用计算机很快可以遍历搜索到,
但我对结果依然很好奇,很期待。。。

云梦 发表于 2013-8-14 11:28:42

本帖最后由 云梦 于 2013-8-14 11:30 编辑

是否有解?

wayne 发表于 2013-8-14 12:07:17

共20个“■”代表20个数字。仅知 0~9 这十个数字在上面算式中的出现每个都不多于2次
也就是每个数 出现2次了

wayne 发表于 2013-8-14 12:27:15

找出来 有且仅有一组解:
179×224
{179, 224, 358, 358, 716, 40096}

   1 7 9
×   2 2 4
     7 1 6
    3 5 8
 3 5 8  
   4 0 0 9 6

mathematica 发表于 2013-8-14 12:46:49

179*224=40096

mathematica 发表于 2013-8-14 12:51:31

Clear["Global`*"];(*Clear all variables*)
Do[
    np1=(IntegerDigits@n)[];(*n的百位*)
    np2=(IntegerDigits@n)[];(*n的十位*)
    np3=(IntegerDigits@n)[];(*n的个位*)
    n1=m*np1;(*百位相乘结果*)
    n2=m*np2;(*十位相乘结果*)
    n3=m*np3;(*个位相乘结果*)
    mn=m*n;(*两个数的乘积*)
    dm=IntegerDigits@m;(*m的各位数字*)
    dn=IntegerDigits@n;(*n的各位数字*)
    dnp1=IntegerDigits@n1;
    dnp2=IntegerDigits@n2;
    dnp3=IntegerDigits@n3;
    dmn=IntegerDigits@mn;
    abc=Sort@Join;(*合并各个数的各位,然后排序*)
    (*判定,然后打印出结果*)
    If[
      n1>=100&&n1<1000&&
      n2>=100&&n2<1000&&
      n3>=100&&n3<1000&&
      mn>=10000&&mn<100000&&
      abc=={0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9},
      Print[{m,n,mn}]
    ],
    {m,100,999},{n,100,999}
]
这是过程!

mathematica 发表于 2013-8-14 12:55:37

好久不用mathematica写代码,居然短短的代码会出现好几个错误,真是不可思议!

wayne 发表于 2013-8-14 12:56:39

还是楼主的式子,假如0-9 十个数字都用到了,问其中某一个非0的数字最多可以出现多少次,并给出最多情况下的式子
这个有谁愿意试试

比如:
148×343
{148, 343, 444, 592, 444, 50764}

   1 4 8
×   3 4 3
     4 4 4
    5 9 2
 4 4 4  
   5 0 7 6 4

mathematica 发表于 2013-8-14 12:58:31

呵呵,看来是wayne第一个给出结果,但是我是第一个给出过程的人!
这题很有意思!适合编程序!
页: [1] 2
查看完整版本: 复原算式