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

[提问] 百度之星的一道与斐波那契数列有关的题

[复制链接]
发表于 2012-12-14 18:49:29 | 显示全部楼层
这个肯定会循环的,因为一位数与两位数都是有限的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-12-17 17:19:29 | 显示全部楼层
3# wayne

今天又重写了一下,
  1. Join @@ Table[{{i, j},
  2.     NestWhile[#~Join~IntegerDigits@Tr[#[[-2 ;;]]] &, {i, j},
  3.      FreeQ[Partition[#[[;; -2]], 2, 1], #[[-2 ;;]]] &]},
  4.    {i, 0, 9}, {j, 0, 9}] // Grid
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-12-17 18:33:24 | 显示全部楼层
3# wayne

今天又重写了一下,Join @@ Table[{{i, j},
    NestWhile[#~Join~IntegerDigits@Tr[#[[-2 ;;]]] &, {i, j},
     FreeQ[Partition[#[[;; -2]], 2, 1], #[[-2 ;;]]] &]},
   {i, 0, 9}, {j, 0, 9} ...
chyanog 发表于 2012-12-17 17:19

把结果贴上来吧
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-12-17 18:33:52 | 显示全部楼层
如果不仅有代码还有结果,那就更好了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-12-17 18:55:08 | 显示全部楼层
13# 郭先抢
和前面的结果是一样的,wayne已经贴过了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-12-17 19:00:41 | 显示全部楼层
本帖最后由 chyanog 于 2012-12-17 19:05 编辑
  1. f[{a_, b_, n_}] :=
  2.   Module[{li, pos, left, repeat},
  3.    li = NestWhile[#~Join~IntegerDigits@Tr[#[[-2 ;;]]] &, {a, b},
  4.      FreeQ[Partition[#[[;; -2]], 2, 1], #[[-2 ;;]]] &];
  5.    
  6.    pos = Position[Partition[li, 2, 1], li[[-2 ;;]], 1, 1][[1, 1]];
  7.    {left, repeat} = {#[[;; pos - 1]], #[[pos ;; -3]]} &@li;
  8.    If[n <= Length[left], left[[n]],
  9.     repeat[[Mod[n - Length[left], Length[repeat], 1]]]]
  10.    ];

  11. f /@ {{1, 1, 2}, {1, 1, 8}, {1, 4, 8}, {1, 5, 10^8 - 1}, {1, 7, 10^8}}

  12. (*out:  {1, 3, 9, 8, 3} *)
复制代码
原题是写这样的一个函数,不过我觉得写的不够neat,wayne兄有空给指点下呗

评分

参与人数 1鲜花 +12 收起 理由
wayne + 12 社区有你更精彩

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-12-18 19:27:52 | 显示全部楼层
本帖最后由 chyanog 于 2012-12-18 20:31 编辑

经过一些测试,Mathematica中Nest不慢,而NestWhile并没有While高效,可能比FixedPoint还慢一点
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-12-20 15:14:58 | 显示全部楼层
16# chyanog
能说说函数的功能吗
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-12-20 16:00:04 | 显示全部楼层
本帖最后由 chyanog 于 2012-12-20 16:03 编辑

18# wayne
就是这个链接里的呀,http://astar.baidu.com/index.php?r=home/detail&id=2
f(a,b,n),a,b是前两个数,返回的是第n个数是几
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-12-21 12:08:19 | 显示全部楼层
19# chyanog
一时没找到合适的函数,姑且用用字符串处理函数.
  1. f[a0_, b0_, n0_] :=
  2. Module[{a = a0, b = b0, n = n0, i, t, tmp, xx},
  3.   xx = Table[0, {i, 10}, {j, 10}];
  4.   tmp = NestWhile[(xx[[#[[-2]] + 1, #[[-1]] + 1]] = 1; Join[#, IntegerDigits[Total[Take[#, -2]]]]) &, {a, b}, xx[[#[[-2]] + 1, #[[-1]] + 1]] == 0 &];
  5.   t = StringJoin[ToString /@ tmp];
  6.   t = StringPosition[t, StringTake[t, -2]][[1, 1]];
  7.   tmp[[If[n < t, n, Mod[n - t, Length[tmp] - t - 1] + t]]]]
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-5-14 02:47 , Processed in 0.043565 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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