找回密码
 欢迎注册
楼主: 无心人

[原创] 上班路上想到的有意思的问题

[复制链接]
发表于 2010-9-26 20:42:13 | 显示全部楼层
本帖最后由 chyanog 于 2010-9-26 23:47 编辑 Mathematica code:
  1. f[n_] := Module[{tmp},
  2. tmp = Select[
  3. Range[10^(n - 1), 10^n - 1], ! MemberQ[IntegerDigits[#], 0] &];
  4. Select[tmp,
  5. And @@ (Table[#[[i]] == #[[i + 1]] + #[[i + 2]], {i, n - 2}] &[
  6. IntegerDigits[#]]) &]];
  7. f /@ Range[3, 6] // Timing
复制代码
需要说明的是,这段代码本来不够精简,在PKU大宝同学的帮助下改写成这样,当然这种方法很暴力,效率较低。 偶还发现 3-6位这种数的个数也比较有趣,都是完全平方数: {36, 16, 4, 1}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-9-27 19:18:07 | 显示全部楼层
题目出错,应该是百位,不是千位
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-9-27 21:14:00 | 显示全部楼层
用vbs就行 For j=2 TO 9 For i=1 TO j-1 b=100*j+i*10+j-i c=i+j d=c+j e=d+c f=e+d a=a&chr(32)&b if c<10 then a=a&chr(32)&c*1000+b if d<10 then a=a&chr(32)&d*10000+c*1000+b if e<10 then a=a&chr(32)&e*100000+d*10000+c*1000+b if f<10 then a=a&chr(32)&f*1000000+e*100000+d*10000+c*1000+b Next Next MsgBox a
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-10-9 20:45:49 | 显示全部楼层
"十一"在家十天,在家干农活挺累的,今天刚到校,家里没网.发现9楼的Java代码有误(尽管是小错)。用C又重写了,第一个还是“构造型”的,另一个是“暴搜型”的:
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int count=0;
  5. for (int i=1;i<9;i++)
  6. {
  7. for (int j=1;j<9;j++)
  8. {
  9. int a,a1=i,a2=j,t=10*a2+a1;
  10. while (a1+a2<10)
  11. {
  12. a=a1+a2;
  13. a1=a2;
  14. a2=a;
  15. int k=1;
  16. for (int u=t;u;u/=10)
  17. {
  18. k*=10;
  19. }
  20. t+=k*a;
  21. printf("%d",t);
  22. printf(++count%10? "\t":"\n");
  23. }
  24. }
  25. }
  26. printf("\n\ncount : %d\n",count);
  27. return 0;
  28. }
复制代码
---------------------------------------------------------------
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define MAXDIG 6
  4. int main(int argc, char *argv[])
  5. {
  6. int count=0;
  7. for (int dig=3;dig<=MAXDIG;dig++)
  8. {
  9. for (int n=(int)pow(10.0,dig-1);n<(int)pow(10.0,dig);n++)
  10. {
  11. int a[10],i=0,m;
  12. for (int t=n;t!=0;t/=10)
  13. {
  14. m=t%10;
  15. if (m==0) break; //continue;
  16. a[i++]=m;
  17. }
  18. bool flag=true;
  19. for ( i=0;i<=dig-3;i++)
  20. {
  21. if (a[i+2]!=a[i+1]+a[i])
  22. {
  23. flag=false;
  24. break;
  25. }
  26. }
  27. if (flag)
  28. {
  29. printf("%d",n);
  30. printf(++count%10?"\t":"\n");
  31. }
  32. }
  33. }
  34. printf("\nCount : %d\n",count);
  35. return 0;
  36. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-10-25 07:18:01 | 显示全部楼层
57个,穷举法
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-10-26 16:33:19 | 显示全部楼层
穷举法
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-11-24 09:56 , Processed in 0.023065 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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