您的位置:首页 > 其它

[没分] Tyvj-Begin P1039 Begin2 – Unit 1 - 3n+1问题

2011-01-24 21:02 274 查看
描述Description考虑如下序列的生成算法:从整数n开始,如果n是偶数,把他除以2;如果他是奇数,把他乘3加1。用新得到的值重复上面的步骤,知道n=1为止。例如n=22时,这个算法的生成序列是:
  221134175226134020105168421
人们猜想(没有证明)对于任意的整数n,该算法总能得到终止于n=1。这个猜想至少对于1000000以内的数都正确。
  对于给定的n,该序列的元素(包括1)个数称之为n的循环节长度。例如上例中循环节长度为16。输入格式InputFormat输入两个数i,j,你的任务是计算i到j(包含i和j),之间的整数中,循环节长度最大的值
并且有多组数据!
0<所有整数<=1000000输出格式OutputFormat对于每对整数i,j,输出原来的i,j和循环节最大的长度样例输入SampleInput1101002002012109001000样例输出SampleOutput11020100200125201210899001000174时间限制TimeLimitation各个测试点2sprogramb1039; var i,k,n:longint; a,b,c:array[1..1000]oflongint; proceduredigui(p:longint); begin ifp=1thenexit elseif(pmod2=0)then begin digui(trunc(p/2)); inc(n); end else begin digui(p*3+1); inc(n); end; end; functiongo(x:longint):longint; begin n:=1; digui(x); go:=n; end; begin fori:=1to1000doc[i]:=0; k:=1; whilenoteofdo begin read(a[k],b[k]); fori:=a[k]tob[k]do ifgo(i)>c[k]thenc[k]:=go(i); inc(k); end; fori:=1tok-2do writeln(a[i],'',b[i],'',c[i]); write(a[k-1],'',b[k-1],'',c[k-1]); end.

程序写的没问题,朴素模拟版。。然而。。。


VijosNTMini2.0.5.6
FreePascalCompilerversion2.4.2[2010/11/10]fori386
Copyright(c)1993-2010byFlorianKlaempfl
TargetOS:Win32fori386
Compilingfoo.pas
Linkingfoo.exe
38linescompiled,0.0sec,29440bytescode,1544bytesdata
#01:RuntimeError(0ms,632KB)
读取访问违规,地址:0x00000004
#02:RuntimeError(0ms,632KB)
读取访问违规,地址:0x00000004
#03:RuntimeError(0ms,632KB)
读取访问违规,地址:0x00000004
#04:RuntimeError(0ms,632KB)
读取访问违规,地址:0x00000004
#05:RuntimeError(0ms,632KB)
读取访问违规,地址:0x00000004
#06:RuntimeError(0ms,632KB)
读取访问违规,地址:0x00000004
#07:RuntimeError(0ms,632KB)
读取访问违规,地址:0x00000004
#08:RuntimeError(0ms,632KB)
读取访问违规,地址:0x00000004
#09:RuntimeError(0ms,632KB)
读取访问违规,地址:0x00000004
#10:RuntimeError(0ms,632KB)
读取访问违规,地址:0x00000004
RuntimeError/0/0ms/0KB

对此,我只想说:去XXX的记忆化搜索!!哥不会,满意了吧!!!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: