请教两道信息学竞赛题(pascal),读程序写答案
第一题program ex2;
var a:array[0..100] of integer;
    i,j,r,p:integer;
    begin
    for i:=0 to 92 do  a[i]:=i+1;
    for i:=1 to 92 do
    begin
    for j:=1 to 3 do
    begin
    r:=p;
    p:=a[p];
    end;
    a[r]:=a[p];
    end;
    writeln(r);
    end.
第二题
program paly;
var pc:array[1..13] of boolean;
i,t,s,k,p:integer;
begin
for i:=1 to 13 do pc[i]:=true;
i:=1;t:=0;s:=2;p:=0;k:=0;
repeat
while p<>i do begin
k:=k+1;
if k>13 then k:=1;
if pc[k]=true then p:=p+1;
end;
pc[k]:=false;
t:=t+1;
i:=i+s;s:=s+1;
until t=8;
write(k);
readln;
end.
我觉得不应按正常的顺序来计算,因为太麻烦。但又不知用什么方法好。请大家多赐教。
thanks.

解决方案 »

  1.   

    呵呵
    在Delphi上运行看答案就OK了
      

  2.   

    第一题等于0吧? var a:array[0..100] of integer;
        i,j,r,p:integer;//p的初值为0,  
        begin
        for i:=0 to 92 do  a[i]:=i+1;//a[0]=a[1]=0;
        for i:=1 to 92 do
        begin
        for j:=1 to 3 do
        begin
        r:=p;//r=p=0
        p:=a[p];//p=a[0]=0
        end;
        a[r]:=a[p];
        end;
        writeln(r);//r=0
        end.
    这种题一般是饶人耳目的
      

  3.   

    第一题等于0吧? var a:array[0..100] of integer;
        i,j,r,p:integer;//p的初值为0,  
        begin
        for i:=0 to 92 do  a[i]:=i+1;//a[0]=a[1]=0;
        for i:=1 to 92 do
        begin
        for j:=1 to 3 do
        begin
        r:=p;//r=p=0
        p:=a[p];//p=a[0]=0
        end;
        a[r]:=a[p];
        end;
        writeln(r);//r=0
        end.
    这种题一般是饶人耳目的
    -------------------------------------------------------------------------晕,错了刚刚运行了一下结果是73丢人了
      

  4.   

    for i:=0 to 92 do  a[i]:=i+1;//a[0]=0+1=1;