主题:[讨论]帮忙改错!!!
编程黑客
[专家分:1660] 发布于 2006-03-21 22:48:00
牛的"非拨拉机"数列:
输入前两个数,得出后面的前500个数,把它们连起来,中间没有空格.
如:输入1 1 数列为1123581321……,求第K位数列中的数字.
这是我编的,是把它们全求出来,放在一个数组里,每位放一个数字,然后输出,可是有错误,请大家帮我查查错,谢谢!!!
var
a,b,c,r,i,j,z,k,q:longint;
s,s1,s2:string;
x:array[1..500] of longint;
begin
read(a,b,k);'A,B为输入的首两位,K为要输出的第K位
q:=0;'一个数字放在数组中的第Q位
str(a,s);'S是要求A的位数方便的字符串变量,与S1,S2意义相同
j:=a;'为使A的值计算后不变,用的一个代替变量
r:=length(s);
r:=r+1;'是求数组中位数与P相减(算出来的,可能错)的变量
repeat
q:=q+1;
x[r-q]:=j mod 10; '取数的每一位,但因第一个取的是个位,所以要用
R和P来计算每一次取的数在数组中的第几位(就
是这里有可能有错)
j:=j div 10;
until (j=0);
z:=b;
str(b,s1);
r:=length(s1);
r:=r+1;
repeat
q:=q+1;
x[r-q]:=z mod 10;
z:=z div 10;
until (z=0);
for i:=3 to 500 do
begin
c:=a+b;
j:=c;
str(c,s2); '计算后面的数,并按上面的方法放置
r:=length(s2);
r:=r+1;
repeat
q:=q+1;
x[r-q]:=j mod 10;
j:=j div 10;
until (j=0);
b:=a;
c:=b;
end;
writeln(x[k]); '输出第K位
end.
[em18]
回复列表 (共17个回复)
沙发
编程黑客 [专家分:1660] 发布于 2006-03-14 22:08:00
怎么没有人帮忙,加+++++++++++++30呀!!!
[em4]
板凳
编程黑客 [专家分:1660] 发布于 2006-03-15 21:55:00
求求大家行行好吧!!!
3 楼
编程黑客 [专家分:1660] 发布于 2006-03-20 21:56:00
跪求行了吧!不会的也来顶一下嘛!!!
4 楼
acen [专家分:200] 发布于 2006-03-21 10:47:00
请对你定义的变量作些说明,是何用途
5 楼
acen [专家分:200] 发布于 2006-03-21 10:52:00
其实无须数组,只用3个数值型变量,a,b,c;a,b存前两个数值,加起来存到C,再把B,C赋到A,B。具体的我再试编一下,你的我也会好好看一下。
6 楼
acen [专家分:200] 发布于 2006-03-21 14:43:00
program ex;
var
i,j,k:integer;
a,b,c:integer;
begin
write('Enter k:');
readln(k);
i:=0;a:=1;b:=0;
if k<1 then write('Data error!')
else begin
while i<k do
begin
inc(i);
c:=a+b;
a:=b;b:=c;
end;
write('No.',k,' is ',c);
end;
readln
end.
这个程序测试通过
7 楼
acen [专家分:200] 发布于 2006-03-21 14:45:00
哦,对不起,看错了,我把第1、2位看成一定是1,1了,不过要改也很容易
别忘了给我加分
8 楼
acen [专家分:200] 发布于 2006-03-21 14:52:00
嗨,题意理解错了,千万别失望,我一定给你答复
9 楼
编程黑客 [专家分:1660] 发布于 2006-03-21 22:37:00
谢谢
10 楼
编程黑客 [专家分:1660] 发布于 2006-03-21 22:49:00
愿你和我一起进步
我来回复