找回密码
 欢迎注册
楼主: wayne

[提问] abc+def=ghij

[复制链接]
发表于 2011-3-15 23:55:20 | 显示全部楼层
本帖最后由 chyanog 于 2011-3-16 01:22 编辑

来个Mathematica的吧,
就是速度相对C类语言慢很多(大约20s),wayne有空的话可以帮忙看看可否改进

  1. FromDigits /@ {#[[1 ;; 3]], #[[4 ;; 6]], #[[7 ;; 10]]} & /@
  2.   Select[Permutations[
  3.     Range[0, 9]], #[[7]] == 1 && #[[1]] <= #[[4]] &&
  4.      FromDigits[#[[1 ;; 3]]] + FromDigits[#[[4 ;; 6]]] ==
  5.       FromDigits[#[[7 ;;]]] &] // Timing
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-3-15 23:58:37 | 显示全部楼层
这样更快些:

  1. Module[{t1, t2},
  2.   t1 = Cases[Permutations[Range[0, 9]], {a_, b_, c_, d_, e_, f_, g_, h_, i_, j_} /; g == 1 && a <= d];
  3.   t2 = Cases[ t1, {a_, b_, c_, d_, e_, f_, g_, h_, i_,  j_} /; #[{a, b, c}] + #[{d, e, f}] == #[{g, h, i, j}] &[
  4. FromDigits]];
  5.   Row /@ {#[[1 ;; 3]], #[[4 ;; 6]], #[[7 ;; 10]]} & /@ t2
  6.   ] // Timing
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-3-16 01:05:22 | 显示全部楼层
本帖最后由 chyanog 于 2011-3-16 01:06 编辑

  1. #include <stdio.h>
  2. int check ( int i, int j, int k )
  3. {
  4.     int a[10] = {0}, ii;
  5.     for ( ; i > 0; i /= 10 )
  6.         a[i % 10]++;
  7.     for ( ; j > 0; j /= 10 )
  8.         a[j % 10]++;
  9.     for ( ; k > 0; k /= 10 )
  10.         a[k % 10]++;
  11.     for ( ii = 1; ii < 10; ii++ )
  12.         if ( a[ii] != 1 ) return 0;
  13.     return 1;
  14. }

  15. int main()
  16. {
  17.     int i, j, k, cnt = 0;
  18.     for (  i = 100; i < 1000 ; i++ )
  19.     {
  20.         for (  j = i; j < 1000 ; j++ )
  21.         {
  22.             k = i + j;
  23.             if ( k > 1000 && k < 2000 && check ( i, j, k ) )
  24.                 printf ( "[%d]: \t%d + %d = %d \n", ++cnt, i, j, i + j );
  25.         }
  26.     }
  27.     return 0;
  28. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-3-16 22:19:25 | 显示全部楼层
本帖最后由 wayne 于 2011-3-16 22:22 编辑

13# chyanog
参考4楼的分析,下面的程序直接在0.01秒内搞定:

data = Table[Select[Permutations[ii], Sort@IntegerDigits[#.{100, 10, 1, 100, 10, 1}] == Complement[Range[0, 9], ii] &], {ii,Select[Subsets[Range[2, 9], {6}], Divisible[Total[#], 9] &]}];

Clear[a, b, c, d, e, f]; Cases[Flatten[data, 1], {a_, b_, c_, d_, e_, f_} -> {100 a + 10 b + c, 100 d + 10 e + f,100 a + 10 b + c + 100 d + 10 e + f}]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-3-16 22:23:56 | 显示全部楼层
太棒了,终于又有一个2222了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-20 12:47 , Processed in 0.053203 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表