信息奧賽競賽題庫含答案_第1頁
信息奧賽競賽題庫含答案_第2頁
信息奧賽競賽題庫含答案_第3頁
信息奧賽競賽題庫含答案_第4頁
信息奧賽競賽題庫含答案_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論