ShengYangWeb ShengYangWeb
关注数: 9 粉丝数: 21 发帖数: 324 关注贴吧数: 5
疯狂的电梯 Pascal 请问哪里错了?谢谢 题目描述 呵呵,有一天ssxyh做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼。那么,从A楼到B楼至少要按几次按钮呢? 输入格式 输入文件共有二行,第一行为三个用空格隔开的正整数,表示N,A,B(1≤N≤200, 1≤A,B≤N),第二行为N个用空格隔开的正整数,表示Ki。 输出格式 输出文件仅一行,即最少按键次数,若无法到达,则输出-1 样例输入 5 1 5 3 3 1 2 5 样例输出 3 Program Elevator; var q:array[1..150000] of record                              ki:longint;                              step:longint;                            end;      k:array[1..200] of longint;      i,ki,n,a,b:longint;      head,tail:longint;//quene begin    readln(n,a,b);    for i:=1 to n do      read(k[i]);    head:=1;tail:=1;    q[head].ki:=a;    while head<=tail do      begin        if q[head].ki=b then          begin            writeln(q[head].step);            halt;          end;        ki:=q[head].ki;        if k[ki]<>0 then          begin            if ki+k[ki]<=n then              begin                inc(tail);                q[tail].ki:=ki+k[ki];                q[tail].step:=q[head].step+1;              end;            if ki-k[ki]>=1 then              begin                inc(tail);                q[tail].ki:=ki-k[ki];                q[tail].step:=q[head].step+1;              end;          end;        inc(head);      end;    writeln(-1); end. 测试结果1: 通过本测试点|有效耗时187ms 测试结果2: 测试结果错误.错误结果为:-1 正确结果应为:134 测试结果3: 通过本测试点|有效耗时47ms 测试结果4: 通过本测试点|有效耗时47ms 测试结果5: 通过本测试点|有效耗时62ms 测试结果6: 测试结果错误.错误结果为:-1 正确结果应为:24 测试结果7: 测试结果错误.错误结果为:-1 正确结果应为:36 测试结果8: 通过本测试点|有效耗时63ms 测试结果9: 通过本测试点|有效耗时46ms 测试结果10: 通过本测试点|有效耗时47ms
求有爱的吧友看看在下的高精度乘法哪里错了?谢谢! 两个数位数相同,最多20000位。压8位做的。Program High_Accuracy_Multiplication; Const Maxn=20000; Var c:array[1..maxn] of int64;      a,b:array[1..maxn] of int64;      k,l1,l2:longint;      s1,s2:ansistring; Procedure Init;    var n,code:longint;        s:string;    begin      readln(n);      readln(s1);      readln(s2);      if (s1='0')or(s2='0') then        begin          writeln(0);          halt;        end;      l1:=length(s1);      l2:=length(s2);      fillchar(a,sizeof(a),0);      fillchar(b,sizeof(b),0);      fillchar(c,sizeof(c),0);      k:=0;      while length(s1)>=8 do        begin          inc(k);          s:=copy(s1,length(s1)-7,8);          val(s,a[k],code);          delete(s1,length(s1)-7,8);        end;      if length(s1)>0 then        begin          inc(k);          val(s1,a[k],code);        end;      k:=0;      while length(s2)>=8 do        begin          inc(k);          s:=copy(s2,length(s2)-7,8);          val(s,b[k],code);          delete(s2,length(s2)-7,8);        end;      if length(s2)>0 then        begin          inc(k);          val(s2,b[k],code);        end;    end; Procedure Work;    var i,j,len:integer;    begin      for i:=1 to k do        for j:=1 to k do          c[i+j-1]:=c[i+j-1]+a[i]*b[j];      for i:=1 to l1+l2 do        begin          c[i+1]:=c[i+1]+c[i] div 100000000;          c[i]:=c[i] mod 100000000;        end;      len:=l1+l2;      while c[len]=0 do        dec(len);      for i:=len downto 1 do        write(c[i]);    end; begin    init;    work; end.
1 下一页