版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
信息奧賽題庫---【信息奧賽題庫】編制組打印楊輝三角前10行標程programyhsj10;varyh:array[1..10,0..10]ofinteger;i,j:integer;beginyh[1,1]:=1;fori:=2to10doforj:=1toidoyh[i,j]:=yh[i-1,j]+yh[i-1,j-1];fori:=1to10dobeginforj:=1toidowrite(yh[i,j],'');writeln;end;End.2.讀入10個數(shù),輸出偶數(shù)項及它們和,輸出奇數(shù)項及它們的平均數(shù)。(讀入10個數(shù)輸出偶數(shù)項及它們和輸出奇數(shù)項及它們的平均數(shù))標程programexe6_1;vari,s,t,n:integer;a:array[1..10]ofinteger;beginfori:=1to10doread(a[i]);fori:=1to10doifimod2=0thenbeginwrite(a[i],'');s:=s+a[i];end;writeln(s);fori:=1to10doifimod2<>0thenbeginwrite(a[i],'');t:=t+a[i];n:=n+1;end;writeln(t/n);end.3.讀入n個數(shù),打印其中的最大數(shù)及其位置號(讀入n個數(shù)打印其中的最大數(shù)及其位置號)標程programexe6_2;vari,max,min,t,n:integer;a:array[1..10]ofinteger;beginfori:=1to10doread(a[i]);max:=a[1];min:=a[1];t:=1;n:=1;fori:=2to9dobeginifmax<a[i]thenbeginmax:=a[i];t:=I;end;ifmin>a[i]thenbeginmin:=a[i];n:=I;end;end;writeln(max,'',t);writeln(min,'',n);end.4.交換a和b的值標程programp1_1;vara,b,x:integer;beginread(a,b);x:=a;a:=b;b:=x;writeln(a,'',b);End.Problem1:leader2誰是組長2問題描述八中信息組需要選一個組長。信息組一共有n個人,分別用1到n編號,其中m個人參與了投票。得票數(shù)過半(票數(shù)大于mdiv2)的人將被選為組長。輸入數(shù)據(jù)將告知這m個人分別將票投給了誰,請統(tǒng)計出誰將擔任八中信息組的組長。輸入數(shù)據(jù)第一行兩個數(shù)n和m。第二行有m個數(shù),這些數(shù)都是不超過n的正整數(shù),表明這m個人的選擇。輸出數(shù)據(jù)輸出將被選為組長的人。如果沒有人的票數(shù)過半,請輸出-1。輸入樣例747727輸出樣例7時間限制各測試點1秒內(nèi)存限制你的程序?qū)⒈环峙?2MB的運行空間數(shù)據(jù)規(guī)模1<=n<=maxlongint1<=m<=1000000考察內(nèi)容查找第k大元素programleader2;vara:array[1..1000000]oflongint;n,m:longint;procedurereadp;vari:longint;beginreadln(n,m);fori:=1tomdoread(a[i]);end;procedureswap(vart1,t2:longint);vart3:longint;begint3:=t1;t1:=t2;t2:=t3;end;functionfind(l,r,k:longint):longint;vari,j,mid:longint;beginifl=rthenexit(a[l]);i:=l;j:=r;mid:=a[(i+j)div2];repeatwhilea[i]<middoinc(i);whilea[j]>middodec(j);ifi<=jthenbeginswap(a[i],a[j]);inc(i);dec(j);end;untili>j;if(l<=j)and(k<=j)thenexit(find(l,j,k));if(i<=r)and(k>=i)thenexit(find(i,r,k));exit(mid);end;functionleader(x:longint):boolean;vari,count:longint;begincount:=0;fori:=1tomdoifa[i]=xtheninc(count);exit(count>mdiv2);end;{====main====}varx:longint;beginassign(input,'leader2.in');reset(input);assign(output,'leader2.out');rewrite(output);readp;x:=find(1,m,mdiv2);ifleader(x)thenwriteln(x)elsewriteln(-1);close(input);close(output);End.Problem2:typewrt有故障的打字機問題描述一臺打字機準備將1到10^n的數(shù)依次打出。在打印過程中,這臺打字機出現(xiàn)了一個故障:數(shù)字“3”打不出來。因此,所有含有數(shù)字“3”的數(shù)都沒有被正確地打出。試問沒有被正確打出的數(shù)一共有多少個。輸入數(shù)據(jù)輸入一個正整數(shù)n。輸出數(shù)據(jù)輸出從1到10^n這些數(shù)中不能被正確打印的數(shù)的個數(shù)。輸入樣例2輸出樣例19時間限制各測試點1秒內(nèi)存限制你的程序?qū)⒈环峙?2MB的運行空間數(shù)據(jù)規(guī)模n<=1000考察內(nèi)容高精度運算(乘法,高精度乘以單精度)programtypewrt;typearr=array[0..1000]ofinteger;functionmul(a:arr;b:integer):arr;vari:integer;ans:arr;beginfillchar(ans,sizeof(ans),0);fori:=1toa[0]dobeginans[i]:=ans[i]+a[i]*b;ans[i+1]:=ans[i+1]+ans[i]div10;ans[i]:=ans[i]mod10;end;ifans[a[0]+1]>0thenans[0]:=a[0]+1elseans[0]:=a[0];exit(ans);end;{===main===}vari,n:integer;ans:arr;beginassign(input,'typewrt.in');reset(input);assign(output,'typewrt.out');rewrite(output);readln(n);ans[0]:=1;ans[1]:=1;fori:=1tondoans:=mul(ans,9);fori:=ndownto2dowrite(9-ans[i]);writeln(10-ans[1]);close(input);close(output);End.Problem3:maxsum最大約數(shù)和問題描述選取和不超過S的若干個不同的正整數(shù),使得所有數(shù)的約數(shù)(不含它本身)之和最大。輸入數(shù)據(jù)輸入一個正整數(shù)S。輸出數(shù)據(jù)輸出最大的約數(shù)之和。樣例輸入11樣例輸出9樣例說明取數(shù)字4和6,可以得到最大值(1+2)+(1+2+3)=9。時間限制各測試點1秒內(nèi)存限制你的程序?qū)⒈环峙?2MB的運行空間數(shù)據(jù)規(guī)模S<=1000考察內(nèi)容0/1背包programmaxsum;vara:array[1..1000]oflongint;f:array[0..1000,0..1000]oflongint;s:longint;functionsum(x:longint):longint;vari,ans:longint;beginans:=0;fori:=1tox-1doifxmodi=0thenans:=ans+i;exit(ans);end;proceduresolve;vari,j:longint;beginfori:=1tosdoforj:=1tosdobeginf[i,j]:=f[i-1,j];if(j-i>=0)and(f[i-1,j-i]+a[i]>f[i,j])thenf[i,j]:=f[i-1,j-i]+a[i];end;end;{===main===}vari:longint;beginassign(input,'maxsum.in');reset(input);assign(output,'maxsum.out');rewrite(output);readln(s);fori:=1tosdoa[i]:=sum(i);solve;writeln(f[s,s]);close(input);close(output);end.Problem4:flu流感會結(jié)束嗎問題描述八中一共有n個學(xué)生。這n個學(xué)生里一共有m對朋友關(guān)系。在流感發(fā)作期,每個健康學(xué)生都要看望當天他生病的朋友(如果有的話),并在第二天被傳染上疾?。ǔ撬诿庖咂趦?nèi));每個生病的學(xué)生在第二天都會痊愈,并在這一天具有免疫性。從第三天起,看望生病的朋友將再次使他染上流感。初始時(第一天),只有一個學(xué)生患有流感。試問多少天后流感會自動結(jié)束。輸入數(shù)據(jù)第一行輸入兩個正整數(shù)n和m。接下來m行每行兩個正整數(shù)x,y,表示編號為x的學(xué)生和編號為y的學(xué)生是一對朋友。輸入數(shù)據(jù)保證每一對朋友關(guān)系只描述一次。最后一行輸入一個正整數(shù),代表初始時患有流感的學(xué)生的編號。輸出數(shù)據(jù)如果流感永遠不會結(jié)束,請輸出-1,否則輸出多少天后流感會結(jié)束。答案保證不超過2000000000。樣例輸入44122334241樣例輸出3樣例說明第一天1號學(xué)生生病,2號學(xué)生訪問他;第二天2號學(xué)生生病,其它三個學(xué)生訪問他,由于1號處于免疫期,未患流感;第三天3、4號學(xué)生生病,2號學(xué)生訪問他們。第四天3、4號學(xué)生痊愈,流感結(jié)束。時間限制各測試點1秒內(nèi)存限制你的程序?qū)⒈环峙?2MB的運行空間數(shù)據(jù)范圍n,m<=100000??疾靸?nèi)容圖的寬度優(yōu)先遍歷programflu;typepointer=^rec1;rec1=recordvalue:longint;next:pointer;end;rec2=recordnode,step:longint;end;varconnect:array[1..100000]ofpointer;queue:array[1..100000]ofrec2;hash:array[1..100000]ofboolean;n,m,t:longint;procedureinsert(x,y:longint);vartmp:pointer;beginnew(tmp);tmp^.value:=x;tmp^.next:=connect[y];connect[y]:=tmp;end;procedurereadp;vari,x,y:longint;beginreadln(n,m);fori:=1tomdobeginreadln(x,y);insert(x,y);insert(y,x);end;readln(t);end;proceduresolve;varclosed,open:longint;tmp:pointer;beginclosed:=0;open:=1;queue[1].node:=t;queue[1].step:=1;hash[t]:=true;repeatclosed:=closed+1;tmp:=connect[queue[closed].node];whiletmp<>nildobeginifnothash[tmp^.value]thenbeginhash[tmp^.value]:=true;open:=open+1;queue[open].node:=tmp^.value;queue[open].step:=queue[closed].step+1;end;tmp:=tmp^.next;end;untilclosed>=open;writeln(queue[open].step);end;beginassign(input,'flu.in');reset(input);assign(output,'flu.out');rewrite(output);readp;solve;close(input);close(output);End.從鍵盤輸入10個數(shù),將這10個數(shù)逆序輸入,并求這10個數(shù)的和,輸出這個和。
programp1;
var
a:array[1..10]ofinteger;
i,s:integer;
begin
fori:=1to10doread(a[i]);
fori:=10downto1dowrite(a[i],'');
writeln;
s:=0;
fori:=1to10dos:=s+a[i];
writeln('s=',s);
end.用篩法求100以內(nèi)的素數(shù)(質(zhì)數(shù))。分析:素數(shù)是除了1和它本身以外沒有其它約數(shù)的數(shù)。用篩法求素數(shù)的方法是:用質(zhì)數(shù)篩去合數(shù):從第一個素數(shù)2開始,把它的倍數(shù)去掉;這樣2以后的第一個非0數(shù)就一定也是素數(shù),把它的倍數(shù)也刪了……重復(fù)這個刪數(shù)過程,直到在所找到的素數(shù)后再也找不到一個非0數(shù)。把所有非0數(shù)輸出。
programp2;
vara:array[1..100]ofinteger;
i,j,k:integer;
begin
fori:=1to100doa[i]:=i;
a[1]:=0;i:=2;
whilei<=100do
begin
k:=i;
whilek<=100do
begin
k:=k+i;
a[k]:=0;
end;
i:=i+1;
whilea[i]=0doi:=i+1;
end;
fori:=1to100doifa[i]<>0thenwrite(a[i],'');
end.競賽小組共有20位同學(xué),這學(xué)期每位同學(xué)共參與了三項比賽,請統(tǒng)計每位同學(xué)的平均分。
分析:定義一個20行3列的二維數(shù)組來存放這些成績。定義一個20個元素的一維數(shù)組來存放平均分。
programp1;
var
a:array[1..20,1..3]ofinteger;
b:array[1..20]ofreal;
i,j:integer;
begin
fori:=1to20do
begin
forj:=1to3doread(a[i,j]);
readln;
end;
fori:=1to20dob[i]:=0;
fori:=1to20do
begin
forj:=1to3dob[i]:=b[i]+a[i,j];
b[i]:=b[i]/3;
end;
fori:=1to20dowrite(b[i]:5:1);
writeln;
end.求n個自然數(shù)的最大公約數(shù);programgcd1;
constmaxn=100;varn,i,gcd:integer;
a:array[1..maxn]ofinteger;
procedureenter;
begin
write('n=(<100)');readln(n);
fori:=1tondo
repeat
write('a[',i,']=');readln(a[i]);
untila[i]>0;
end;
procedurefind_gcd(x,y:integer);
varr:integer;
begin
r:=xmody;
whiler<>0dobeginx:=y;y:=r;r:=xmody;end
gcd:=y;
end;procedureprint;
begin
writeln('GCD=',gcd);
end;
begin
enter;
gcd:=a[1];
fori:=2tondo
find_gcd(gcd,a[i]);
print;
end.編一程序,求從10名同學(xué)中選出3名代表,有幾種不同的選法。(公式:C(m,n)=m!/n!*(m-n)!從m中選n)programzohe1;
varm,n:integer;
c:longint;
functionfactor(x:integer):longint;
vari:integer;
p:longint;
begin
p:=1;
fori:=1toxdop:=p*i;
factor:=p;
end;
begin
write('m,n=');readln(m,n);
c:=factor(m)div(factor(n)*factor(m-n));
writeln('c(',m,',',n,')=',c);
end.例4:全局變量和局部變量。programlocal_global;
vari,k:integer;
proceduresub1;
vari,j:integer;
begin
i:=17;
writeln('iinsub=',i);
writeln('kinsub=',k);
end;
begin
i:=2;k:=9;
writeln('iinmain=',i);
writeln('kinsub=',k);
sub1;
writeln('iinmain=',i);
writeln('jinmain=',j);
readln;
end.1、驗證卡布列克運算。(cab.pas)任意一個四位數(shù),只要它們各個位上的數(shù)字是不全相同的,就有這樣的規(guī)律:
1)將組成該四位數(shù)的四個數(shù)字由大到小排列,形成由這四個數(shù)字構(gòu)成的最大的四位數(shù);
2)將組成該四位數(shù)的四個數(shù)字由小到大排列,形成由這四個數(shù)字構(gòu)成的最小的四位數(shù)(如果四個數(shù)中含有0,則得到的數(shù)不足四位);
3)求兩個數(shù)的差,得到一個新的四位數(shù)(高位零保留)。
重復(fù)以上過程,最后得到的結(jié)果是6174,這個數(shù)被稱為卡布列克數(shù)請你寫一個程序,計算一個四位數(shù)經(jīng)過上述運算最后得到卡布列克數(shù)所需的步數(shù)。輸入文件:cab.in文件包含一行數(shù)據(jù),即一個四位正整數(shù)。輸出文件:cab.out文件包含一個整數(shù),即步數(shù)。Programcab;varc,t:array[1..4]ofinteger;i,j,temp,step:integer;s:array[1..4]ofchar;beginfori:=1to4doread(s[i]);readln;fori:=4downto1doc[i]:=ord(s[5-i])-ord('0');step:=0;while(c[1]<>4)or(c[2]<>7)or(c[3]<>1)or(c[4]<>6)dobeginfori:=1to3doforj:=i+1to4doifc[i]>c[j]thenbegintemp:=c[i];c[i]:=c[j];c[j]:=tempend;fori:=1to4dot[i]:=c[5-i];fori:=1to4dobeginc[i]:=c[i]-t[i];j:=i;whilec[j]<0dobeginc[j]:=c[j]+10;j:=j+1;c[j]:=c[j]-1endend;step:=step+1end;writeln(step);end.2、最大整數(shù)。(string.pas)設(shè)有n個正整數(shù)(n≤30000),將它們聯(lián)接成一排,組成一個最大的多位整數(shù)。例如:n=3時,3個整數(shù)13,312,343聯(lián)接成的最大整數(shù)為:34331213又如:n=4時,4個整數(shù)7,13,4,246聯(lián)接成的最大整數(shù)為:7424613輸入文件:s.in文件第一行包含一個正整數(shù),即正整數(shù)的個數(shù)n,文件第二行為n個正整數(shù),各數(shù)之間用空格分隔。輸出文件:s.out文件包含一行數(shù)據(jù),即聯(lián)接成的多位數(shù)。vara:array[1..30000]ofstring;n,i,j,k,code,m:integer;s:string;beginreadln(n);fori:=1tondobeginread(k);str(k,a[i]);end;fori:=ndownto2dobeginforj:=1toi-1doif(a[j]+a[j+1])<(a[j+1]+a[j])thenbegins:=a[j];a[j]:=a[j+1];a[j+1]:=s;end;end;.fori:=1tondowrite(a[i]);end.3、蛇形方陣。(snake.pas)任給n,試按如下方式對A[I,j]賦值,例如:Entern:6126715163581417264913182527101219242833112023293234212230313536輸入文件:snake.in文件包含一個正整數(shù),即階數(shù)n。輸出文件:snake.out文件包含n行,每行n個數(shù)的蛇形方陣。varn,i,j,r,c,k:integer;beginreadln(n);fori:=1tondobeginforj:=1tondobeginifi+j<=n+1thenk:=(i+j-2)*(i+j-1)div2+(i+j)mod2*i+(i+j-1)mod2*jelsebeginr:=n+1-i;c:=n+1-j;k:=n*n+1-(r+c-2)*(r+c-1)div2-(r+c)mod2*r-(r+c-1)mod2*c;end;write(k:4);end;writeln;end;end.4、誰拿了最多獎學(xué)金(scholar.pas)某校的慣例是在每學(xué)期的期末考試之后發(fā)放獎學(xué)金。發(fā)放的獎學(xué)金共有五種,獲取的條件各自不同:1)院士獎學(xué)金,每人8000元,期末平均成績高于80分(>80),并且在本學(xué)期內(nèi)發(fā)表1篇或1篇以上論文的學(xué)生均可獲得;2)五四獎學(xué)金,每人4000元,期末平均成績高于85分(>85),并且班級評議成績高于80分(>80)的學(xué)生均可獲得;3)成績優(yōu)秀獎,每人2000元,期末平均成績高于90分(>90)的學(xué)生均可獲得;4)西部獎學(xué)金,每人1000元,期末平均成績高于85分(>85)的西部省份學(xué)生均可獲得;5)班級貢獻獎,每人850元,班級評議成績高于80分(>80)的學(xué)生干部均可獲得;只要符合條件就可以得獎,每項獎學(xué)金的獲獎人數(shù)沒有限制,每名學(xué)生也可以同時獲得多項獎學(xué)金。例如姚林的期末平均成績是87分,班級評議成績82分,同時他還是一位學(xué)生干部,那么他可以同時獲得五四獎學(xué)金和班級貢獻獎,獎金總數(shù)是4850元?,F(xiàn)在給出若干學(xué)生的相關(guān)數(shù)據(jù),請計算哪些同學(xué)獲得的獎金總數(shù)最高(假設(shè)總有同學(xué)能滿足獲得獎學(xué)金的條件)?!据斎胛募枯斎胛募cholar.in的第一行是一個整數(shù)N(1<=N<=100),表示學(xué)生的總數(shù)。接下來的N行每行是一位學(xué)生的數(shù)據(jù),從左向右依次是姓名,期末平均成績,班級評議成績,是否是學(xué)生干部,是否是西部省份學(xué)生,以及發(fā)表的論文數(shù)。姓名是由大小寫英文字母組成的長度不超過20的字符串(不含空格);期末平均成績和班級評議成績都是0到100之間的整數(shù)(包括0和100);是否是學(xué)生干部和是否是西部省份學(xué)生分別用一個字符表示,Y表示是,N表示不是;發(fā)表的論文數(shù)是0到10的整數(shù)(包括0和10)。每兩個相鄰數(shù)據(jù)項之間用一個空格分隔?!据敵鑫募枯敵鑫募cholar.out包括三行,第一行是獲得最多獎金的學(xué)生的姓名,第二行是這名學(xué)生獲得的獎金總數(shù)。如果有兩位或兩位以上的學(xué)生獲得的獎金最多,輸出他們之中在輸入文件中出現(xiàn)最早的學(xué)生的姓名。第三行是這N個學(xué)生獲得的獎學(xué)金的總數(shù)?!緲永斎搿?YaoLin8782YN0ChenRuiyi8878NY1LiXin9288NN0ZhangQin8387YN1【樣例輸出】ChenRuiyi900028700programscholar;varname:array[1..100]ofstring;a1,a2,a5:array[1..100]oflongint;a3,a4:array[1..100]ofchar;n,i,max,total,p:longint;maxname:string;ch:char;beginreadln(n);fori:=1tondobeginread(ch);whilech<>''dobeginname[i]:=name[i]+ch;read(ch);end;readln(a1[i],a2[i],ch,a3[i],ch,a4[i],ch,a5[i]);end;fori:=1tondobeginp:=0;if(a1[i]>80)and(a5[i]>=1)theninc(p,8000);if(a1[i]>85)and(a2[i]>80)theninc(p,4000);if(a1[i]>90)theninc(p,2000);if(a1[i]>85)and(a4[i]='Y')theninc(p,1000);if(a2[i]>80)and(a3[i]='Y')theninc(p,850);ifp>maxthenbeginmax:=p;maxname:=name[i];end;inc(total,p);end;writeln(maxname);writeln(max);writeln(total);end.奇數(shù)魔方陣把整數(shù)1到n(n為奇數(shù))排成一個n*n方陣,使方陣中的每一行·每一列以及對角線上的數(shù)之和都相同programjsmfz;varmagic:array[1..100,1..100]ofinteger;i,j,k,h,l,n:integer;beginread(n);fori:=1tondoforj:=1tondomagic[i,j]:=0;k:=1;i:=1;j:=ndiv2+1;magic[i,j]:=k;whilek<n*ndobegink:=k+1;h:=i-1;l:=j-1;ifl=0thenl:=n;ifmagic[h,l]=0thenbeginmagic[h,l]:=k;i:=h;j:=l;endelsebeginmagic[i+1,j]:=k;i:=i+1;end;end;fori:=1tondobeginforj:=1tondowrite(magic[i,j]:3);writeln;end;end.
輸入50名學(xué)生4門功課的成績,輸出各人各科成績及總分
programcj;vara:array[1..50,1..6]ofinteger;i,j:integer;beginfori:=1to50doforj:=1to5doread(a[i,j]);fori:=1to50doforj:=2to5doa[i,6]:=a[i,6]+a[i,j];fori:=1to50dobeginforj:=1to6dowrite(a[i,j],'');writeln;end;End.稀疏矩陣化簡programxsjz;constn=5;vara:array[1..n,1..n]ofinteger;b:array[1..100,1..3]ofinteger;i,j,k:integer;beginfori:=1tondoforj:=1tondoread(a[i,j]);k:=0;fori:=1tondoforj:=1tondoifa[i,j]<>0thenbegink:=k+1;b[k,1]:=i;b[k,2]:=j;b[k,3]:=a[i,j];end;fori:=1tokdobeginforj:=1to3dowrite(b[i,j]:3);end;End.將a和b中大的值給max的程序programp1_2;vara,b,max:integer;beginread(a,b);max:=a;ifb>maxthenmax:=b;writeln(max);End.給定一個正整數(shù)n,判定它是否為素數(shù)的程序programp1_3;vari,n,r,w:integer;beginread(n);w:=0i:=2;repeatr:=nmodi;ifr=0thenw:=1;i:=i+1;until(i>n-1)or(w=1);ifw=0thenwriteln('yes')elsewriteln('no')End.輸入兩個數(shù)a,b,輸出較大的數(shù)。
programtt;
vara,b:integer;
begin
readln(a,b);
ifa>bthenwriteln(a)
elsewriteln(b);
end.某全自動加油站a,b,c三種汽油的單價(元/kg)分別是1.50、1.35和1.18,也提供了“自己加”或“協(xié)助加”兩個服務(wù)等級,這樣用戶可以得到5%或10%的優(yōu)惠。編一個程序,用戶輸入加油量、汽油品種和服務(wù)類型(f-自動,m-自己,e-協(xié)助),然后計算應(yīng)付款。
programpcase1;
var
oil,help:char;
kg,total:real;
begin
write('Entertheamountinkilograms(kg):');readln(kg);
write('Whichtypeofthegasoline(a,b,c):');readln(oil);
wirte('Whichtypeforservice(f,m,e):');readln(help);
caseoilof
'a':total:=1.50*kg;
'b':total:=1.35*kg;
'c':total:=1.18*kg;
elsewriteln('InputError!')
end;
casehelpof
'f':;
'm':total:=total*(1-0.05);
'e':total:=total*(1-0.10);
elsewriteln('InputError!')
end;
writeln;
writeln('Totalis',total:10:2);
end.從鍵盤上讀入年和月,輸出該月有多少天。
programpcase2;
var
year,month,day:integer;
runnian:boolean;
begin
write('Enteryearandmonth:');readln(year,month);
casemonthof
1,3,5,7,8,10,12:day:=31;
4,6,9,11:day:=30;
2:begin
runnian:=(yearmod400=0)or((yearmod4=0)and(yearmod100<>0));
caserunnianof
true:day:=28;
false:day:=29;
end;
end;
end;
end.從鍵盤輸入10個數(shù),將這10個數(shù)逆序輸入,并求這10個數(shù)的和,輸出這個和。programp1;
var
a:array[1..10]ofinteger;
i,s:integer;
begin
fori:=1to10doread(a[i]);
fori:=10downto1dowrite(a[i],'');
writeln;
s:=0;
fori:=1to10dos:=s+a[i];
writeln('s=',s);
end.用篩法求100以內(nèi)的素數(shù)(質(zhì)數(shù))。分析:素數(shù)是除了1和它本身以外沒有其它約數(shù)的數(shù)。用篩法求素數(shù)的方法是:用質(zhì)數(shù)篩去合數(shù):從第一個素數(shù)2開始,把它的倍數(shù)去掉;這樣2以后的第一個非0數(shù)就一定也是素數(shù),把它的倍數(shù)也刪了……重復(fù)這個刪數(shù)過程,直到在所找到的素數(shù)后再也找不到一個非0數(shù)。把所有非0數(shù)輸出。
programp2;
var
a:array[1..100]ofinteger;
i,j,k:integer;
begin
fori:=1to100doa[i]:=i;
a[1]:=0;i:=2;
whilei<=100do
begin
k:=i;
whilek<=100do
begin
k:=k+i;
a[k]:=0;
end;
i:=i+1;
whilea[i]=0doi:=i+1;
end;
fori:=1to100doifa[i]<>0thenwrite(a[i],'');
end.下面是一個建立和使用文件的程序:programwenjian;
constn=3;m=2;
typestudent=record
name:string;
score:array[1..m]of0..100;
end;
varst:array[1..n]ofstudent;
stfile:fileofstudent;
sumst:array[1..n]ofinteger;
sumsub:array[1..m]ofinteger;
sum:integer;
procedurenewfile;
vari,j:integer;
begin
assign(stfile,'score.fil');
rewrite(stfile);
fori:=1tondo
begin
writeln('Inputstudent',i,'nameand',m,'score');
readln(st[i].name);
forj:=1tomdo
read(st[i].score[j]);
readln;
write(stfile,st[i]);
end;
close(stfile);
writeln;
writeln;
end;
procedurejisuan;
vari,j:integer;beginassign(stfile,'score.fil');
reset(stfile);
fori:=1tomdosumsub[i]:=0;
fori:=1tondo
begin
read(stfile,st[i]);
withst[i]do
begin
sumst[i]:=0;
forj:=1tomdo
begin
sumst[i]:=sumst[i]+score[j];
sumsub[j]:=sumsub[j]+score[j];
end;
end;
end;
close(stfile);
sum:=0;
fori:=1tondo
sum:=sum+sumst[i];
fori:=1tondo
begin
withst[i]do
begin
write(name);
forj:=1tomdowrite(score[j]:6);
end;
writeln(sumst[i]:6);
end;
write('sum=');
fori:=1tomdo
write(sumsub[i]:6);
writeln(sum:8);end;beginnewfile;jisuan;End.連續(xù)輸入一序列整數(shù),組成鏈表(并以動態(tài)的形式把它們記錄下來),當輸入的數(shù)為-1時,停止輸入,然后把輸入的整數(shù)按相反的順序輸出.programlianbiao;
typelink=^data;
data=record
num:integer;
next:link;
end;
varp,q:link;
i:integer;
begin
q:=nil;
readln(i);
whilei<>-1dobeginnew(p);
withp^do
begin
num:=i;
next:=q;
end;
q:=p;
readln(i);end;
whilep<>nildo
begin
write(p^.num:6);
p:=p^.next;
end;
readln;
end.輸入若干整數(shù)(輸入32767停止輸入)排序(小到大)輸出之。programlianbiao;
typelink=^data;
data=record
num:integer;
next:link;
end;
varhead,p,q,r:link;
i:integer;
begin
head:=nil;
readln(i);
whilei<>32767do
begin
new(p);
p^.num:=i;
p^.next:=nil;
ifhead=nilthenbeginhead:=p;end
else
begin
q:=head;
ifp^.num<q^.numthenbeginhead:=p;p^.next:=qendelse
begin
while(p^.num>=q^.num)and(q<>nil)dobeginr:=q;q:=q^.next;end;
ifq=nilthenr^.next:=pelsebeginr^.next:=p;p^.next:=qend
end;
end;
readln(i);
end;
p:=head;
whilep<>nildo
begin
write(p^.num:6);
p:=p^.next;
end;
readln;
end.計算n!可用遞歸公式如下:1當n=0時fac(n)={n*fac(n-1)當n>0時可編寫程序如下:programfac2;varn:integer;functionfac(n:integer):real;beginifn=0thenfac:=1elsefac:=n*fac(n-1)end;beginwrite('n=');readln(n);writeln('fac(',n,')=',fac(n):6:0);End.樓梯有n階臺階,上樓可以一步上1階,也可以一步上2階,編一程序計算共有多少種不同的走法.設(shè)n階臺階的走法數(shù)為f(n)顯然有1n=1f(n)={2n=2f(n-1)+f(n-2)n>2可編程序如下:programlouti;varn:integer;functionf(x:integer):integer;beginifx=1thenf:=1elseifx=2thenf:=2elsef:=f(x-1)+f(x-2);end;beginwrite('n=');read(n);writeln('f(',n,')=',f(n))End.例3梵塔問題如圖:已知有三根針分別用1,2,3表示,在一號針中從小放n個盤子,現(xiàn)要求把所有的盤子從1針全部移到3針,移動規(guī)則是:使用2針作為過度針,每次只移動一塊盤子,且每根針上不能出現(xiàn)大盤壓小盤.找出移動次數(shù)最小的方案.程序如下:programfanta;varn:integer;proceduremove(n,a,b,c:integer);beginifn=1thenwriteln(a,'--->',c)elsebeginmove(n-1,a,c,b);writeln(a,'--->',c);move(n-1,b,a,c);end;end;beginwrite('Entern=');read(n);move(n,1,2,3);end.例4快速排序快速排序的思想是:先從數(shù)據(jù)序列中選一個元素,并將序列中所有比該元素小的元素都放到它的右邊或左邊,再對左右兩邊分別用同樣的方法處之直到每一個待處理的序列的長度為1,處理結(jié)束.程序如下:programkspv;
constn=7;
type
arr=array[1..n]ofinteger;
var
a:arr;
i:integer;
procedurequicksort(varb:arr;s,t:integer);
vari,j,x,t1:integer;
begin
i:=s;j:=t;x:=b[i];
repeat
while(b[j]>=x)and(j>i)doj:=j-1;
ifj>ithenbegint1:=b[i];b[i]:=b[j];b[j]:=t1;end;
while(b[i]<=x)and(i<j)doi:=i+1;
ifi<jthenbegint1:=b[j];b[j]:=b[i];b[i]:=t1;end
untili=j;
b[i]:=x;
i:=i+1;j:=j-1;
ifs<jthenquicksort(b,s,j);
ifi<tthenquicksort(b,i,t);
end;
begin
write('inputdata:');
fori:=1tondoread(a[i]);
writeln;
quicksort(a,1,n);
write('outputdata:');
fori:=1tondowrite(a[i]:6);
writeln;
end.例1由鍵盤上輸入任意n個符號;輸出它的全排列.programhh;
constn=4;
vari,k:integer;
x:array[1..n]ofinteger;
st:string[n];
t:string[n];
procedureinput;
vari:integer;
begin
write('Enterstring=');readln(st);
t:=st;
end;
functionplace(k:integer):boolean;
vari:integer;
begin
place:=true;
fori:=1tok-1do
ifx[i]=x[k]then
beginplace:=false;breakend;
end;
procedureprint;
vari:integer;
begin
fori:=1tondowrite(t[x[i]]);
writeln;
end;
begin
input;
k:=1;x[k]:=0;
whilek>0do
begin
x[k]:=x[k]+1;
while(x[k]<=n)and(notplace(k))dox[k]:=x[k]+1;
ifx[k]>nthenk:=k-1
elseifk=nthenprint
elsebegink:=k+1;x[k]:=0end
end;
end.例2.n個皇后問題:programhh;
constn=8;
vari,j,k:integer;
x:array[1..n]ofinteger;
functionplace(k:integer):boolean;
vari:integer;
begin
place:=true;
fori:=1tok-1do
if(x[i]=x[k])or(abs(x[i]-x[k])=abs(i-k))then
place:=false;
end;
procedureprint;
vari:integer;
begin
fori:=1tondowrite(x[i]:4);
writeln;
end;
begin
k:=1;x[k]:=0;
whilek>0do
begin
x[k]:=x[k]+1;
while(x[k]<=n)and(notplace(k))dox[k]:=x[k]+1;
ifx[k]>nthenk:=k-1
elseifk=nthenprint
elsebegink:=k+1;x[k]:=0end
end;End.插入排序varn,i,j:longint;a:array[0..10000]oflongint;beginreadln(n);fori:=1tondoread(a[i]);fori:=2tondobegina[0]:=a[i];j:=i-1;while(a[0]<a[j])and(j>0)dobegina[j+1]:=a[j];j:=j-1;end;a[j+1]:=a[0];end;fori:=1tondowrite(a[i]:4);end.歸并排序(求逆序?qū)Γ﹙ara,x,y,z,b:array[1..100000]oflongint;n,i:longint;ans:int64;proceduremerge(l,mid,r:longint);vari,j,k:longint;beginfori:=ltomiddox[i]:=a[i];fori:=mid+1tordoy[i]:=a[i];i:=l;j:=mid+1;k:=l-1;whilek<rdobeginif((x[i]>=y[j])or(j>r))and(i<=mid)thenbegininc(k);z[k]:=x[i];inc(i);endelsebegininc(k);z[k]:=y[j];inc(j);ans:=ans+mid-i+1;end;end;fori:=ltordoa[i]:=z[i];end;proceduresort(l,r:longint);varmid:longint;beginmid:=(l+r)shr1;ifl<midthensort(l,mid);ifmid+1<rthensort(mid+1,r);merge(l,mid,r);end;procedureqsort(l,r:longint);vari,j,x,t:longint;begini:=l;j:=r;x:=b[(l+r)shr1];repeatwhileb[i]>xdoinc(i);whileb[j]<xdodec(j);ifi<=jthenbegint:=a[i];a[i]:=a[j];a[j]:=t;t:=b[i];b[i]:=b[j];b[j]:=t;inc(i);dec(j);end;untili>j;ifi<rthenqsort(i,r);ifj>lthenqsort(l,j);end;beginreadln(n);fori:=1tondoread(b[i]);fori:=1tondoread(a[i]);qsort(1,n);sort(1,n);writeln(ans);end.快速排序vara:array[1..10000]oflongint;n,i:longint;procedureasd(l,r:longint);vart,m,i,j:longint;begini:=l;j:=r;m:=a[(l+r)div2];repeatwhilem<a[i]doinc(i);whilem>a[j]dodec(j);ifi<=jthenbegint:=a[i];a[i]:=a[j];a[j]:=t;inc(i);dec(j);end;untili>j;ifj>l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高端住宅小區(qū)物業(yè)保安勞務(wù)服務(wù)合同范本
- 2025年度購房貸款個人信息保護合同
- 2025年度游樂園項目場地使用權(quán)及設(shè)施維護合作協(xié)議
- 2025年度水田承包與農(nóng)業(yè)品牌建設(shè)合作協(xié)議
- 二零二五年度白蟻防治服務(wù)合同-城市綠化帶白蟻防治
- 二零二五年度游艇俱樂部船舶租賃代理合同
- 二零二五年度餐飲企業(yè)員工勞動合同法律服務(wù)與保障
- 2025年度互聯(lián)網(wǎng)簽訂方協(xié)議詳細流程與網(wǎng)絡(luò)安全責任追究協(xié)議
- 二零二五年度二手電腦及配件交易合同
- 二零二五年度綠色能源股份轉(zhuǎn)讓合同
- 2024年人教版小學(xué)三年級信息技術(shù)(下冊)期末試卷附答案
- TB 10012-2019 鐵路工程地質(zhì)勘察規(guī)范
- 新蘇教版三年級下冊科學(xué)全冊知識點(背誦用)
- 鄉(xiāng)鎮(zhèn)風(fēng)控維穩(wěn)應(yīng)急預(yù)案演練
- 腦梗死合并癲癇病人的護理查房
- 蘇教版四年級上冊脫式計算300題及答案
- 犯罪現(xiàn)場保護培訓(xùn)課件
- 扣款通知單 采購部
- 電除顫操作流程圖
- 湖北教育出版社三年級下冊信息技術(shù)教案
- 設(shè)計基礎(chǔ)全套教學(xué)課件
評論
0/150
提交評論