来个Mathematica的吧,
就是速度相对C类语言慢很多(大约20s),wayne有空的话可以帮忙看看可否改进
FromDigits /@ {#[], #[], #[]} & /@
Select[Permutations[
Range], #[] == 1 && #[] <= #[] &&
FromDigits[#[]] + FromDigits[#[]] ==
FromDigits[#[]] &] // Timing
这样更快些:
Module[{t1, t2},
t1 = Cases], {a_, b_, c_, d_, e_, f_, g_, h_, i_, j_} /; g == 1 && a <= d];
t2 = Cases[ t1, {a_, b_, c_, d_, e_, f_, g_, h_, i_,j_} /; #[{a, b, c}] + #[{d, e, f}] == #[{g, h, i, j}] &[
FromDigits]];
Row /@ {#[], #[], #[]} & /@ t2
] // Timing
本帖最后由 chyanog 于 2011-3-16 01:06 编辑
#include <stdio.h>
int check ( int i, int j, int k )
{
int a = {0}, ii;
for ( ; i > 0; i /= 10 )
a++;
for ( ; j > 0; j /= 10 )
a++;
for ( ; k > 0; k /= 10 )
a++;
for ( ii = 1; ii < 10; ii++ )
if ( a != 1 ) return 0;
return 1;
}
int main()
{
int i, j, k, cnt = 0;
for (i = 100; i < 1000 ; i++ )
{
for (j = i; j < 1000 ; j++ )
{
k = i + j;
if ( k > 1000 && k < 2000 && check ( i, j, k ) )
printf ( "[%d]: \t%d + %d = %d \n", ++cnt, i, j, i + j );
}
}
return 0;
}
本帖最后由 wayne 于 2011-3-16 22:22 编辑
13# chyanog
参考4楼的分析,下面的程序直接在0.01秒内搞定:
data = Table, Sort@IntegerDigits[#.{100, 10, 1, 100, 10, 1}] == Complement, ii] &], {ii,Select, {6}], Divisible, 9] &]}];
Clear; Cases, {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}] 太棒了,终于又有一个2222了
页:
1
[2]