QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1005|回复: 9

一道数列的题 (NOIP),help

[复制链接]
发表于 2004-6-19 22:32:39 | 显示全部楼层 |阅读模式
[code:1]
program t1;
var n:integer;
function count(n:integer):integer;
  begin
   if n=1 then count:=0 else
     if n mod 2=0 then count:=count(n div 2)+1 else
      count:=count(n*3+1)+1;
  end;
begin
  readln(n);
  writeln(count(n));
end.


输入99
输出:_______
[/code:1]



抽象为
[code:1]
            0                   (n == 1)
f(n) =   f(n/2)+1        (偶)
            f(3n + 1) + 1 (奇)

f(99) = ?
[/code:1]
发表于 2004-6-19 22:37:02 | 显示全部楼层
用pascal编译运行不就知道结果了么?
回复

使用道具 举报

发表于 2004-6-19 22:50:16 | 显示全部楼层
没有pascal编译器,我翻译成c运行了一下,结果是 25 。
回复

使用道具 举报

 楼主| 发表于 2004-6-19 22:52:57 | 显示全部楼层
.......
这是读程序题
回复

使用道具 举报

发表于 2004-6-19 22:59:26 | 显示全部楼层
那就用笔在纸上算,应该可以在半分钟以内完成。
回复

使用道具 举报

 楼主| 发表于 2004-6-19 23:15:28 | 显示全部楼层
果然可以直接算出来

但是这到题有没有更好的方法
f(99) 需要递归25次,每次都加1
hehe
回复

使用道具 举报

发表于 2004-6-19 23:28:22 | 显示全部楼层
应该可以将公式变换以便更快地算出答案,但我还没看出来,可能是数学太差的缘故^_^
回复

使用道具 举报

 楼主| 发表于 2004-6-19 23:38:26 | 显示全部楼层
我也这样想,但是只推出了
对于n = 2^k   (k数与自然数)
f ( n ) = k

用上这个规律,只是最后少了两三步地归,还是没有用
回复

使用道具 举报

发表于 2004-6-20 01:05:37 | 显示全部楼层
很简单的,一看就可以看出来了
回复

使用道具 举报

 楼主| 发表于 2004-6-20 18:23:41 | 显示全部楼层
看了,没看出
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 02:36 , Processed in 0.088352 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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