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.