算法习题及解答 联系客服

发布时间 : 星期六 文章算法习题及解答更新完毕开始阅读

for i:=0 to n-2 do begin

r:=test[i]*test[i+1]+1; test[i+1]:=r; end;

if maxr then min:=r; end;

procedure PaiLie(num:integer); var

i:integer; begin

if num = 0 then begin

writestr(); exit; end;

for i:=0 to n-1 do begin

if not IsIn(i) then begin

excepti[n -num]:=i;

test[n-num]:=arr[i]; PaiLie(num-1); end; end;

excepti[n-num]:=-1; end;

procedure ReadArray(); var

i:integer; begin

for i:=0 to n-1 do read(arr[i]); end;

begin

assign(input,'MAXMIN.IN'); assign(output,'MAXMIN.OUT'); reset(input); rewrite(output); read(n); max:=0; min:=10000; ReadArray(); InitExcept(); PaiLie (n);

writeln('max=',max); writeln('min=',min); write('k=',max-min); close(input); close(output);

end.

260、输入一个英文句子,例如:“This is a Book.\,可以看到句子是以“.”来作为结束符号的,并且单词之间以一个空格来分隔。接着再输入一个单词A,请找出首次在句子中出现的与A$相同的单词,是句子中的第几个单词,若 不存在,则输出该句子中单词字符的总个数。 例如对上句子而言,若输入单词“is”,则应输出: 2 若输入单词“isa”,则应输出:11 var

n,ls,la,i:integer; a,s,sf:string;

begin

readln(s); readln(a);

s:=copy(s,1,length(s)-1); n:=1;

la:=length(a);

ls:=length(s); sf:=s;

while pos(' ',sf)<>0 do begin

delete(sf, pos(' ',sf),1); n:=n+1; end; sf:='';

for i:=1 to ls-la+1 do begin

if (copy(s,i,la)=a)and(copy(s,i-1,1)=' ')and(copy(s,i+la,1)=' ') then

begin

sf:=copy(s,1,i+la-1); break; end; end;

if sf<>'' then begin i:=1;

while pos(' ',sf)<>0 do begin

i:=i+1;

delete(sf,pos(' ',sf),1); end; end else begin

while pos(' ',s)<>0 do begin

delete(s,pos(' ',s),1); end;

i:=length(s) end;

write(i); end.

263、给出二个任意的正整数N,K(1<=N<=10000,0<=K

(2)当剩余的数不够减时,则将其加上K,再重复(1)的操作过程。 (3)若剩余的数为0时,则结束操作并输出进行减法的次数。 (4)若存在永远不能减完的情况,则输出信息“ERROR!”。 例如:当N=4,K=2时,操作过程如下: 1)4-1=3 减2^0 2)3-2=1 减2^1

由于不够减,所以加K的值2,得:N=1+2=3 3)3-1=2 减2^0 4)2-2=0 减2^1

此时结果为0,则输出:STEP=4(表示进行了4次减法操作运算) 又如:当N=2,K=1时,操作过程如下: 1)2-1=1 减2^0

由于不够下次减,所以加K的值1,得:N=1+1=2 2)2-1=1 减2^0 ????

在这种情况下,永远不能减完,则输出信息“ERROR!” var

n,k,i,s,temp:integer; flag:boolean;

function mexp(a:integer;b:integer):integer; var

t,m:integer; begin

t:=1;

for m:=1 to b do begin

t:=t*a; end; mexp:=t; end;

begin

write('N='); read(n); writeln; write('K='); read(k); writeln; temp:=k; i:=-1;

while temp > 0 do begin

i:=i+1;

temp:=temp-mexp(2,i); if temp=0 then

begin

write('ERROR!'); halt; end; end; i:=0; s:=0;

while n<>0 do begin

s:=s+1;

n:=n-mexp(2,i); i:=i+1; if n<0 then begin

i:=0;

while n<0 do begin

n:=n+k; end; end;

end;

write('STEP=',s); end.

264、生日日期 ( Birthday ) 问题描述:

小甜甜的生日是YY年MM月DD日,他想知道自己出生后第一万天纪念日的日期(出生日算第0天)。 输入格式:

从文件的第一行分别读入YY,MM,DD其中1949<=YY<=2002,日期绝对合法。 输出格式:

输出文件只有一行,即小甜甜生日第一万天以后的日期,格式为 “YY-MM-DD”。 样例:

BIRTHDAY.DAT BIRTHDAY .OUT

1975 7 15var

i:longint; y,m,d:integer;

procedure incdate(); var

flag:integer; begin

d:=d+1;

if (y mod 100=0) then begin

if (y mod 400=0)and(m=2) then begin

flag:=29; end else begin

case m of

1,3,5,7,8,10,12:flag:=31; 4,6,9,11:flag:=30; 2:flag:=28;

end; end;

if d>flag then begin

d:=1; m:=m+1;

if m=13 then