请教两道信息学竞赛题(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.
第一题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.
在Delphi上运行看答案就OK了
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.
这种题一般是饶人耳目的
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丢人了