




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
信息奧賽題庫(2011-4-3)---【信息奧賽題庫】編制組打印楊輝三角前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個數,輸出偶數項及它們和,輸出奇數項及它們的平均數。(讀入10個數輸出偶數項及它們和輸出奇數項及它們的平均數)標程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個數,打印其中的最大數及其位置號(讀入n個數打印其中的最大數及其位置號)標程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個人參與了投票。得票數過半(票數大于mdiv2)的人將被選為組長。輸入數據將告知這m個人分別將票投給了誰,請統計出誰將擔任八中信息組的組長。輸入數據第一行兩個數n和m。第二行有m個數,這些數都是不超過n的正整數,表明這m個人的選擇。輸出數據輸出將被選為組長的人。如果沒有人的票數過半,請輸出-1。輸入樣例747727輸出樣例7時間限制各測試點1秒內存限制你的程序將被分配32MB的運行空間數據規模1<=n<=maxlongint1<=m<=1000000考察內容查找第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的數依次打出。在打印過程中,這臺打字機出現了一個故障:數字“3”打不出來。因此,所有含有數字“3”的數都沒有被正確地打出。試問沒有被正確打出的數一共有多少個。輸入數據輸入一個正整數n。輸出數據輸出從1到10^n這些數中不能被正確打印的數的個數。輸入樣例2輸出樣例19時間限制各測試點1秒內存限制你的程序將被分配32MB的運行空間數據規模n<=1000考察內容高精度運算(乘法,高精度乘以單精度)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最大約數和問題描述選取和不超過S的若干個不同的正整數,使得所有數的約數(不含它本身)之和最大。輸入數據輸入一個正整數S。輸出數據輸出最大的約數之和。樣例輸入11樣例輸出9樣例說明取數字4和6,可以得到最大值(1+2)+(1+2+3)=9。時間限制各測試點1秒內存限制你的程序將被分配32MB的運行空間數據規模S<=1000考察內容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流感會結束嗎問題描述八中一共有n個學生。這n個學生里一共有m對朋友關系。在流感發作期,每個健康學生都要看望當天他生病的朋友(如果有的話),并在第二天被傳染上疾病(除非他在免疫期內);每個生病的學生在第二天都會痊愈,并在這一天具有免疫性。從第三天起,看望生病的朋友將再次使他染上流感。初始時(第一天),只有一個學生患有流感。試問多少天后流感會自動結束。輸入數據第一行輸入兩個正整數n和m。接下來m行每行兩個正整數x,y,表示編號為x的學生和編號為y的學生是一對朋友。輸入數據保證每一對朋友關系只描述一次。最后一行輸入一個正整數,代表初始時患有流感的學生的編號。輸出數據如果流感永遠不會結束,請輸出-1,否則輸出多少天后流感會結束。答案保證不超過2000000000。樣例輸入44122334241樣例輸出3樣例說明第一天1號學生生病,2號學生訪問他;第二天2號學生生病,其它三個學生訪問他,由于1號處于免疫期,未患流感;第三天3、4號學生生病,2號學生訪問他們。第四天3、4號學生痊愈,流感結束。時間限制各測試點1秒內存限制你的程序將被分配32MB的運行空間數據范圍n,m<=100000。考察內容圖的寬度優先遍歷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個數,將這10個數逆序輸入,并求這10個數的和,輸出這個和。programp1;vara:array[1..10]ofinteger;i,s:integer;beginfori:=1to10doread(a[i]);fori:=10downto1dowrite(a[i],'');writeln;s:=0;fori:=1to10dos:=s+a[i];writeln('s=',s);end.用篩法求100以內的素數(質數)。分析:素數是除了1和它本身以外沒有其它約數的數。用篩法求素數的方法是:用質數篩去合數:從第一個素數2開始,把它的倍數去掉;這樣2以后的第一個非0數就一定也是素數,把它的倍數也刪了……重復這個刪數過程,直到在所找到的素數后再也找不到一個非0數。把所有非0數輸出。programp2;vara:array[1..100]ofinteger;i,j,k:integer;beginfori:=1to100doa[i]:=i;a[1]:=0;i:=2;whilei<=100dobegink:=i;whilek<=100dobegink:=k+i;a[k]:=0;end;i:=i+1;whilea[i]=0doi:=i+1;end;fori:=1to100doifa[i]<>0thenwrite(a[i],'');end.競賽小組共有20位同學,這學期每位同學共參與了三項比賽,請統計每位同學的平均分。分析:定義一個20行3列的二維數組來存放這些成績。定義一個20個元素的一維數組來存放平均分。programp1;vara:array[1..20,1..3]ofinteger;b:array[1..20]ofreal;i,j:integer;beginfori:=1to20dobeginforj:=1to3doread(a[i,j]);readln;end;fori:=1to20dob[i]:=0;fori:=1to20dobeginforj:=1to3dob[i]:=b[i]+a[i,j];b[i]:=b[i]/3;end;fori:=1to20dowrite(b[i]:5:1);writeln;end.求n個自然數的最大公約數;programgcd1;constmaxn=100;varn,i,gcd:integer;a:array[1..maxn]ofinteger;procedureenter;beginwrite('n=(<100)');readln(n);fori:=1tondorepeatwrite('a[',i,']=');readln(a[i]);untila[i]>0;end;procedurefind_gcd(x,y:integer);varr:integer;beginr:=xmody;whiler<>0dobeginx:=y;y:=r;r:=xmody;endgcd:=y;end;procedureprint;beginwriteln('GCD=',gcd);end;beginenter;gcd:=a[1];fori:=2tondofind_gcd(gcd,a[i]);print;end.編一程序,求從10名同學中選出3名代表,有幾種不同的選法。(公式:C(m,n)=m!/n!*(m-n)!從m中選n)programzohe1;varm,n:integer;c:longint;functionfactor(x:integer):longint;vari:integer;p:longint;beginp:=1;fori:=1toxdop:=p*i;factor:=p;end;beginwrite('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;begini:=17;writeln('iinsub=',i);writeln('kinsub=',k);end;begini:=2;k:=9;writeln('iinmain=',i);writeln('kinsub=',k);sub1;writeln('iinmain=',i);writeln('jinmain=',j);readln;end.1、驗證卡布列克運算。(cab.pas)任意一個四位數,只要它們各個位上的數字是不全相同的,就有這樣的規律:1)將組成該四位數的四個數字由大到小排列,形成由這四個數字構成的最大的四位數;2)將組成該四位數的四個數字由小到大排列,形成由這四個數字構成的最小的四位數(如果四個數中含有0,則得到的數不足四位);3)求兩個數的差,得到一個新的四位數(高位零保留)。重復以上過程,最后得到的結果是6174,這個數被稱為卡布列克數請你寫一個程序,計算一個四位數經過上述運算最后得到卡布列克數所需的步數。輸入文件:cab.in文件包含一行數據,即一個四位正整數。輸出文件:cab.out文件包含一個整數,即步數。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、最大整數。(string.pas)設有n個正整數(n≤30000),將它們聯接成一排,組成一個最大的多位整數。例如:n=3時,3個整數13,312,343聯接成的最大整數為:34331213又如:n=4時,4個整數7,13,4,246聯接成的最大整數為:7424613輸入文件:s.in文件第一行包含一個正整數,即正整數的個數n,文件第二行為n個正整數,各數之間用空格分隔。輸出文件:s.out文件包含一行數據,即聯接成的多位數。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文件包含一個正整數,即階數n。輸出文件:snake.out文件包含n行,每行n個數的蛇形方陣。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、誰拿了最多獎學金(scholar.pas)某校的慣例是在每學期的期末考試之后發放獎學金。發放的獎學金共有五種,獲取的條件各自不同:1)院士獎學金,每人8000元,期末平均成績高于80分(>80),并且在本學期內發表1篇或1篇以上論文的學生均可獲得;2)五四獎學金,每人4000元,期末平均成績高于85分(>85),并且班級評議成績高于80分(>80)的學生均可獲得;3)成績優秀獎,每人2000元,期末平均成績高于90分(>90)的學生均可獲得;4)西部獎學金,每人1000元,期末平均成績高于85分(>85)的西部省份學生均可獲得;5)班級貢獻獎,每人850元,班級評議成績高于80分(>80)的學生干部均可獲得;只要符合條件就可以得獎,每項獎學金的獲獎人數沒有限制,每名學生也可以同時獲得多項獎學金。例如姚林的期末平均成績是87分,班級評議成績82分,同時他還是一位學生干部,那么他可以同時獲得五四獎學金和班級貢獻獎,獎金總數是4850元。現在給出若干學生的相關數據,請計算哪些同學獲得的獎金總數最高(假設總有同學能滿足獲得獎學金的條件)。【輸入文件】輸入文件scholar.in的第一行是一個整數N(1<=N<=100),表示學生的總數。接下來的N行每行是一位學生的數據,從左向右依次是姓名,期末平均成績,班級評議成績,是否是學生干部,是否是西部省份學生,以及發表的論文數。姓名是由大小寫英文字母組成的長度不超過20的字符串(不含空格);期末平均成績和班級評議成績都是0到100之間的整數(包括0和100);是否是學生干部和是否是西部省份學生分別用一個字符表示,Y表示是,N表示不是;發表的論文數是0到10的整數(包括0和10)。每兩個相鄰數據項之間用一個空格分隔。【輸出文件】輸出文件scholar.out包括三行,第一行是獲得最多獎金的學生的姓名,第二行是這名學生獲得的獎金總數。如果有兩位或兩位以上的學生獲得的獎金最多,輸出他們之中在輸入文件中出現最早的學生的姓名。第三行是這N個學生獲得的獎學金的總數。【樣例輸入】4YaoLin8782YN0ChenRuiyi8878NY1LiXin9288NN0ZhangQin8387YN1【樣例輸出】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.奇數魔方陣把整數1到n(n為奇數)排成一個n*n方陣,使方陣中的每一行·每一列以及對角線上的數之和都相同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名學生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.給定一個正整數n,判定它是否為素數的程序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.輸入兩個數a,b,輸出較大的數。programtt;vara,b:integer;beginreadln(a,b);ifa>bthenwriteln(a)elsewriteln(b);end.某全自動加油站a,b,c三種汽油的單價(元/kg)分別是1.50、1.35和1.18,也提供了“自己加”或“協助加”兩個服務等級,這樣用戶可以得到5%或10%的優惠。編一個程序,用戶輸入加油量、汽油品種和服務類型(f-自動,m-自己,e-協助),然后計算應付款。programpcase1;varoil,help:char;kg,total:real;beginwrite('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;varyear,month,day:integer;runnian:boolean;beginwrite('Enteryearandmonth:');readln(year,month);casemonthof1,3,5,7,8,10,12:day:=31;4,6,9,11:day:=30;2:beginrunnian:=(yearmod400=0)or((yearmod4=0)and(yearmod100<>0));caserunnianoftrue:day:=28;false:day:=29;end;end;end;end.從鍵盤輸入10個數,將這10個數逆序輸入,并求這10個數的和,輸出這個和。programp1;vara:array[1..10]ofinteger;i,s:integer;beginfori:=1to10doread(a[i]);fori:=10downto1dowrite(a[i],'');writeln;s:=0;fori:=1to10dos:=s+a[i];writeln('s=',s);end.用篩法求100以內的素數(質數)。分析:素數是除了1和它本身以外沒有其它約數的數。用篩法求素數的方法是:用質數篩去合數:從第一個素數2開始,把它的倍數去掉;這樣2以后的第一個非0數就一定也是素數,把它的倍數也刪了……重復這個刪數過程,直到在所找到的素數后再也找不到一個非0數。把所有非0數輸出。programp2;vara:array[1..100]ofinteger;i,j,k:integer;beginfori:=1to100doa[i]:=i;a[1]:=0;i:=2;whilei<=100dobegink:=i;whilek<=100dobegink:=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=recordname: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;beginassign(stfile,'score.fil');rewrite(stfile);fori:=1tondobeginwriteln('Inputstudent',i,'nameand',m,'score');readln(st[i].name);forj:=1tomdoread(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:=1tondobeginread(stfile,st[i]);withst[i]dobeginsumst[i]:=0;forj:=1tomdobeginsumst[i]:=sumst[i]+score[j];sumsub[j]:=sumsub[j]+score[j];end;end;end;close(stfile);sum:=0;fori:=1tondosum:=sum+sumst[i];fori:=1tondobeginwithst[i]dobeginwrite(name);forj:=1tomdowrite(score[j]:6);end;writeln(sumst[i]:6);end;write('sum=');fori:=1tomdowrite(sumsub[i]:6);writeln(sum:8);end;beginnewfile;jisuan;End.連續輸入一序列整數,組成鏈表(并以動態的形式把它們記錄下來),當輸入的數為-1時,停止輸入,然后把輸入的整數按相反的順序輸出.programlianbiao;typelink=^data;data=recordnum:integer;next:link;end;varp,q:link;i:integer;beginq:=nil;readln(i);whilei<>-1dobeginnew(p);withp^dobeginnum:=i;next:=q;end;q:=p;readln(i);end;whilep<>nildobeginwrite(p^.num:6);p:=p^.next;end;readln;end.輸入若干整數(輸入32767停止輸入)排序(小到大)輸出之。programlianbiao;typelink=^data;data=recordnum:integer;next:link;end;varhead,p,q,r:link;i:integer;beginhead:=nil;readln(i);whilei<>32767dobeginnew(p);p^.num:=i;p^.next:=nil;ifhead=nilthenbeginhead:=p;endelsebeginq:=head;ifp^.num<q^.numthenbeginhead:=p;p^.next:=qendelsebeginwhile(p^.num>=q^.num)and(q<>nil)dobeginr:=q;q:=q^.next;end;ifq=nilthenr^.next:=pelsebeginr^.next:=p;p^.next:=qendend;end;readln(i);end;p:=head;whilep<>nildobeginwrite(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階,編一程序計算共有多少種不同的走法.設n階臺階的走法數為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個盤子,現要求把所有的盤子從1針全部移到3針,移動規則是:使用2針作為過度針,每次只移動一塊盤子,且每根針上不能出現大盤壓小盤.找出移動次數最小的方案.程序如下: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快速排序快速排序的思想是:先從數據序列中選一個元素,并將序列中所有比該元素小的元素都放到它的右邊或左邊,再對左右兩邊分別用同樣的方法處之直到每一個待處理的序列的長度為1,處理結束.程序如下:programkspv;constn=7;typearr=array[1..n]ofinteger;vara:arr;i:integer;procedurequicksort(varb:arr;s,t:integer);vari,j,x,t1:integer;begini:=s;j:=t;x:=b[i];repeatwhile(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;enduntili=j;b[i]:=x;i:=i+1;j:=j-1;ifs<jthenquicksort(b,s,j);ifi<tthenquicksort(b,i,t);end;beginwrite('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;beginwrite('Enterstring=');readln(st);t:=st;end;functionplace(k:integer):boolean;vari:integer;beginplace:=true;fori:=1tok-1doifx[i]=x[k]thenbeginplace:=false;breakend;end;procedureprint;vari:integer;beginfori:=1tondowrite(t[x[i]]);writeln;end;begininput;k:=1;x[k]:=0;whilek>0dobeginx[k]:=x[k]+1;while(x[k]<=n)and(notplace(k))dox[k]:=x[k]+1;ifx[k]>nthenk:=k-1elseifk=nthenprintelsebegink:=k+1;x[k]:=0endend;end.例2.n個皇后問題:programhh;constn=8;vari,j,k:integer;x:array[1..n]ofinteger;functionplace(k:integer):boolean;vari:integer;beginplace:=true;fori:=1tok-1doif(x[i]=x[k])or(abs(x[i]-x[k])=abs(i-k))thenplace:=false;end;procedureprint;vari:integer;beginfori:=1tondowrite(x[i]:4);writeln;end;begink:=1;x[k]:=0;whilek>0dobeginx[k]:=x[k]+1;while(x[k]<=n)and(notplace(k))dox[k]:=x[k]+1;ifx[k]>nthenk:=k-1elseifk=nthenprintelsebegink:=k+1;x[k]:=0endend;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.歸并排序(求逆序對)vara,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>lthenasd(l,j);ifi<rthenasd(i,r);end
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 推動農村充電設施升級助力綠色發展
- 熱電廠項目發展潛力分析報告
- 地方高校轉型的有效策略與實踐路徑探析
- AI+醫藥行業趨勢及市場前景報告分析
- 燃氣安全管理培訓
- 蜜雪冰城員工培訓
- 人教版 (新課標)七年級上冊第三單元 生物圈中的綠色植物第一章 生物圈中有哪些綠色植物第一節 藻類、苔蘚和蕨類植物教學設計
- 全國青島版信息技術七年級下冊專題二第6課一、《前期設置》教學設計
- 《租船》(教學設計)-2023-2024學年二年級下冊數學北師大版
- 隧道監理控制要點培訓
- 2025年徐礦集團校園招聘700人高頻重點提升(共500題)附帶答案詳解
- 資產管理崗管理制度內容
- 鐵路貨物運價規則
- 電動車火警火災應急培訓
- 《政府采購制度改革》課件
- 2024年江蘇省常州市中考英語真題卷及答案解析
- 2024-2030年中國微風發電行業十三五規劃及投融資分析報告
- 售前售中售后服務培訓
- 高中英語2025屆高考讀后續寫高分佳句(共11種74句)
- 【MOOC】知識創新與學術規范-南京大學 中國大學慕課MOOC答案
- 【MOOC】供應鏈管理-武漢理工大學 中國大學慕課MOOC答案
評論
0/150
提交評論