18届全国青少年信息学奥林匹克联赛初赛(详解)(普及组)(3)

2020-06-21 16:03

三、阅读程序写结果。(共4题,每题8分,共计32分) 1. var

a,b,c,d,e,ans: integer;

begin readln(a,b,c); d:=a+b; e:=b+c; ans:=d+e; writeln(ans);

end.

输入:1 2 5

输出:__10____________

2. var n,i,ans: integer;

begin readln(n); ans:= 0;

for i:= 1 to n do

if (n mod i)= 0 then ans := ans+1; writeln(ans); end.

输入:18

输出:_______6______

mod 函数是取余数函数(两数相除,取其余数)

if (n mod i)= 0 的意思是假如n能整除i(余数为0) 3. var

n,i,j: integer;

a: array[1..100,1..100] of integer;

function solve(x,y:integer): integer;

var u,v: integer; begin if x = n then begin solve:= a[x,y];

exit;

end;

u:= solve(x+1,y); v:= solve(x+1,y+1); if u>v then

solve := a[x,y] + u else

solve := a[x,y] + v; end;

begin

read(n);

for i:= 1 to n do for j:=1 to i do read(a[i,j]);

writeln(solve(1,1)); end.

输入: 5

2 -1 4 2 -1 -2 -1 6 4 0 3 2 -1 5 8

输出:_____14_________ 4. var

n,ans,i,j: integer; S: string;

Function get(i: integer) : char; begin

if i<= n then get:= s[i]

else get:=s[i-n]; end;

begin readln(s); n:= length (s);

ans:= 1;

for i:= 2 to n do

begin for j:=0 to n-1 do

if get(i+j) < get(ans+j) then begin ans:=i; break; end

else if get(i+j)> get(ans+j) then break; end;

for j:=0 to n-1 do

write(get(ans+j)); writeln; end.

答案:

四、 输入:CBBADADA

1: 输出:_ ACBBADAD___________

1. 0

2. y[j]1)and (f[i]>f[i-1]) 1.(坐标统计)输入n个整点在平面上的坐标。对于每个点,可以控制所有位于5.ans:=max_f 它左下方的点(即x、y坐标都比它小),它可以控制的点的数目称为“战斗力”。2: (如果若干个点的战依次输出每个点的战斗力,最后输出战斗力最高的点的编号1 false 斗力并列最高,输出其中最大的编号)。

2 used[data[i]]:=flase

3.j Const 4.n SIZE= 100; 5.break Var

X,y,f:array[1..SIZE] of integer; N,i,j,max_f,ans: integer;

Begin readln(n); For i:=1 to n do Readln (x[i],y[i]]); Max_f :=0;

For i:=1 to n do Begin f[i]:= ① ; For j:= 1 to n do

Begin if(x[j]< x[i]) and ( ② ) then ③ ; End;

If ④ then

Begin max_f:= f[i]; ⑤ ; End; End;

For i:= 1 to n do Writeln(f[i]); Writeln(ans);

End.

2. (排列数)输入两个正整数n,m(1

3 1 3 2

const

SIZE:=25; var

used: array[1.. SIZE] of boolean; data: array[1.. SIZE] or integer; n,m,i,j,k : integer; flag: boolean;

begin readln(n,m);

fillchar (used,sizeof(used), false); for i:=1 to m do begin data[i]:=i; used[i]:= true; end;

flag:= true;

While flag do

begin for i:= 1 to m-1 do write(data[i],’ ‘); writeln(data[m]); flag:= ① ;

for i:=m downto 1 do begin ② ;

for j:= data[i]+1 to n do if used[j]= false then begin used[j]:= true; data[i]:= ③ ; flag:= true; Break;

end;

if flag then

begin for k:=i+1 to m do

for j:=1 to ④ do if used[j]= false then begin data[k]:= j; used[j]:= true; Break; end; ⑤ ;

end; end; end; end.

================================== 参考答案: 一、

1-10:ABABC CBCAB 11-20:BDBCC DCACB 二、1. 5 2. 2880 三、 10 6 14

ACBBADAD 四、 1. 0

2. y[j]

3.f[i]:=f[i]+1;

4.(i>1)and (f[i]>f[i-1]) 5.ans:=max_f

2.1 false

2 used[data[i]]:=flase 3.j 4.n 5.break


18届全国青少年信息学奥林匹克联赛初赛(详解)(普及组)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高中政治生活与哲学 唯物辩证法的联系观 教学案新人教版必修4

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: