小学信息奥试卷2009年石狮市信息学奥林匹克竞赛普及组试卷(2)

2019-03-15 13:14

ans:=ans+1; end;

writeln('ans=',ans); end. 输入: 5 6

0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 0 1 0 0 0 0 1 1 1 1 0 1 1 1 0

输出:_______________________________

26. 阅读以下程序,写出程序的运行结果。 program prog4;

var a,x:array[0..99] of integer; n,i,tmp,finish:integer; begin read(n);

for i:=1 to n do a[i]:=0; for i:=1 to n do read(x[i]); finish:=0;

while(finish=0) do begin if (n mod 2=1) then begin a[n-1]:=x[n]; i:=n-3;

while(i>=2) do begin a[i]:=x[i+1]-a[i+2]; i:=i-2; end; a[1]:=x[1]-a[2]; i:=3;

while(i<=n) do begin a[i]:=x[i-1]-a[i-2]; i:=i+2; end;

end else begin a[n-1]:=x[n]; i:=n-3;

while(i>=1) do begin a[i]:=x[i+1]-a[i+2]; i:=i-2; end; a[2]:=x[1]-a[1]; i:=4;

while(i<=n) do begin a[i]:=a[i-1]-a[i-2]; i:=i+2; end; end;

for i:=1 to n do begin

tmp:=a[i]; a[i]:=x[i]; x[i]:=tmp; if (x[i]<0) then finish:=1; end; end;

for i:=1 to n do write(a[i],' '); writeln(); end.

输入:5 5 10 1 9 0

输出:_______________________________

四. 完善程序 (每空3分,共30分)

27. 函数MaxMin求出数组a中的最大值和最小值,其中参数n为数组a中的元素个数。参数min带回最小值,通过函数MaxMin返回最大值max。请填空实现上述功能。 program prog5;

type arr=array[0..6] of integer; var a:arr=(4,6,12,2,9,5,10); min:integer;

function MaxMin(n:integer;var min:integer):integer; var max,i:integer;

begin

max:=a[0]; ;

for i:=1 to n-1 do begin

if (a[i]>max) then max:=a[i] else if ( ) then min:=a[i]; end;

MaxMin:=max; end; begin

writeln('max value is ',MaxMin(7,min)); writeln('min value is ',min); end.

28. 求全排列中下一个排列的算法:

设当前排列为P1 P2 ,…,Pn,则下一个排列可按如下算法完成:

(1).求满足关系式Pi-1 < Pi 的i的最大值,设为mi,即mi=max{i | Pi-1 < Pi , i = 2..n} (2).求满足关系式Pmi-1 < Pj的j的最大值,设为mj,即mj=max{j | Pmi-1 < Pj , j = mi..n} (3).Pmi-1与Pmj互换得 (P) = P1 P2 ,…, Pn

(4).{P} = P1 P2 ,…, Pmi-1 Pmi,…, Pn部分的顺序逆转,得P1 P2 ,…, Pmi-1 Pn Pn-1,…, Pmi便是下一个排列。

(5). 当mi=1的时候,需要特殊处理。 例:设P1 P2 P3 P4 =3421

(1).mi= max{i | Pi-1 < Pi , i = 2..n} = 2 (2).mj=max{j| Pmi-1 < Pj , j =1..n} = 2 (3).P1 与P2 交换得到4321

(4).4321 的321 部分逆转得到4123 即是3421 的下一个排列。 请填空实现上述功能。 program prog6;

type arr=array[0..19] of integer;

var P:arr; i,n:integer;

procedure NEXT_permutation(var P:arr;n:integer); var i,j,mi,mj,t,tmp:integer; begin mi:=1;

for i:=n downto 2 do begin

if (P[i-1]

if (mi>1) then begin mj:=mi;

for j:=n downto mi do begin

if ( ) then begin mj:=j; break; end; end;

tmp:=P[mi-1]; P[mi-1]:=P[mj]; P[mj]:=tmp; end;

for t:=mi to do begin

; P[t]:=P[n-t+mi]; P[n-t+mi]:=tmp; end; end; begin read(n);

for i:=1 to n do read(P[i]); NEXT_permutation(P,n);

for i:=1 to n do write(P[i],' '); writeln(); end.

29. 多项式相加问题

以下程序是实现用两个多项式的加法运算。多项式的每一个项由一个记录来实现,其

包含两个变量:系数cc和幂次pp。 例如:下面的两个多项式

A(x)=2x1000 +3x3+1 B(x) =x4+10x3+3x2+1

计算结果C(x)=A(x)+B(x)=2x1000 +x4+13x3+3x2+2

其中A(x), B(x), C(x)分别用三个不同的一维数组实现。

程序中多项式的输入输出形式:项数,按降幂的顺序(项,系数)。以上样例表示为: 输入:3 2 1000 3 3 1 0

4 1 4 10 3 3 2 1 0

输出:5 2 1000 1 4 13 3 3 2 2 0 program prog7; const M=100;

type NODE=record {多项式的项} cc:integer; {系数} pp:integer; {指数} end;

var A,B,C:array[0..M] of NODE;

att,btt,ctt,i,j,n:integer; {att,btt,ctt} begin

read(att);

for i:=0 to att-1 do read(A[i].cc,A[i].pp); read(btt);

for j:=0 to btt-1 do read(B[j].cc,B[j].pp); ctt:=0; i:=0; j:=0; while do begin

if (iB[j].pp) then begin C[ctt]:=A[i]; inc(ctt); inc(i); end

else if ( ) then begin

C[ctt]:=B[j]; inc(ctt); inc(j); end else begin ;

C[ctt].pp:=A[i].pp; inc(ctt); inc(i); inc(j); end; end

else if (i

else if (j

for i:=0 to ctt-1 do write(' ',C[i].cc,' ',C[i].pp); writeln(); end.


小学信息奥试卷2009年石狮市信息学奥林匹克竞赛普及组试卷(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:实验动物生产许可证验收标准20120423

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

马上注册会员

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