完善程序奧賽復(fù)習(xí)市公開課金獎(jiǎng)市賽課一等獎(jiǎng)?wù)n件_第1頁
完善程序奧賽復(fù)習(xí)市公開課金獎(jiǎng)市賽課一等獎(jiǎng)?wù)n件_第2頁
完善程序奧賽復(fù)習(xí)市公開課金獎(jiǎng)市賽課一等獎(jiǎng)?wù)n件_第3頁
完善程序奧賽復(fù)習(xí)市公開課金獎(jiǎng)市賽課一等獎(jiǎng)?wù)n件_第4頁
完善程序奧賽復(fù)習(xí)市公開課金獎(jiǎng)市賽課一等獎(jiǎng)?wù)n件_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1完善程序及算法分析算法復(fù)習(xí)完善程序解題辦法應(yīng)用舉例第1頁第1頁2完善程序題解題辦法一、完善程序題解題環(huán)節(jié):1、仔細(xì)閱讀文字解釋,理解題意和提供解題思緒2、依據(jù)問題求解要求,理解輸入、輸出內(nèi)容和問題處理辦法3、先閱讀主程序,理解輸出變量和輸出要求以及主程序中需要調(diào)用過程或函數(shù)是哪些。4、閱讀過程或函數(shù),理解其完畢功效5、填空辦法:普通從主程序最后輸出要求,反推主程序中變量填寫或表示式、語句等書寫第2頁第2頁36、依據(jù)主程序參數(shù)與子程序參數(shù)傳遞關(guān)系,填寫子程序變量,依據(jù)子程序需要完畢功效,完畢子程序填空7、填寫完畢,再將程序整個(gè)閱讀、執(zhí)行一遍,看能否完畢問題提出要求。二、例題解答:

1.(坐標(biāo)統(tǒng)計(jì))輸入n個(gè)整點(diǎn)在平面上坐標(biāo)。對于每個(gè)點(diǎn),能夠控制所有位于它左下方點(diǎn)(即x、y坐標(biāo)都比它?。軌蚩刂泣c(diǎn)數(shù)目稱為“戰(zhàn)斗力”。依次輸出每個(gè)點(diǎn)戰(zhàn)斗力,最后輸出戰(zhàn)斗力最高點(diǎn)編號(hào)(假如若干個(gè)點(diǎn)戰(zhàn)斗力并列最高,輸出其中最大編號(hào))。讀題,

第3頁第3頁4ConstSIZE=100;

VarX,y,f:array[1..SIZE]ofinteger;

N,i,j,max_f,ans:integer;

Beginreadln(n);

Fori:=1tondoReadln(x[i],y[i]]);

Max_f:=0;

Fori:=1tondo

Beginf[i]:=

;

Forj:=1tondo

Beginif(x[j]<x[i])and(

)then

;

End;第4頁第4頁5If

then

Beginmax_f:=f[i];

;

End;End;

Fori:=1tondo

Writeln(f[i]);Writeln(ans);End.

(1)0

(2)y[j]<y[i]

(3)f[i]:=f[i]+1;

(4)f[i]>=max_f;

(5)ans:=i第5頁第5頁62.(排列數(shù))輸入兩個(gè)正整數(shù)n,m(1<n<20,1<m<n),在1~n中任取m個(gè)數(shù),按字典序從小到大輸出所有這樣排列。比如:輸入:32(算法未必是老式)

輸出:12

13

21

23

31

32

constSIZE=25;

varused:array[1..SIZE]ofboolean;

data:array[1..SIZE]orinteger;

n,m,i,j,k:integer;flag:boolean;第6頁第6頁7Beginreadln(n,m);

fillchar(used,sizeof(used),false);{只能置0、True}

fori:=1tomdo

begindata[i]:=i;used[i]:=true;

end;

flag:=true;

Whileflagdo

beginfori:=1tom-1dowrite(data[i],’‘);

writeln(data[m]);{第一次最小}第7頁第7頁8flag:=

;

fori:=mdownto1do

begin

;

forj:=data[i]+1tondoifused[j]=falsethen

beginused[j]:=true;

data[i]:=

;

flag:=true;

Break;

end;第8頁第8頁9ifflagthen

beginfork:=i+1tomdo

forj:=1to

doifused[j]=falsethen

begindata[k]:=j;

used[j]:=true;

Break;

end;

;

end;

end;

end;end.(1)false

(2)used[data[i]]:=flase

(3)j

(4)n

(5)break第9頁第9頁10

3.笛卡爾樹對于一個(gè)給定兩兩不等正整數(shù)序列,笛卡爾樹是這樣一棵二叉樹:首先,它是一個(gè)最小堆,即除了根結(jié)點(diǎn)外,每個(gè)結(jié)點(diǎn)權(quán)值都不小于父節(jié)點(diǎn)權(quán)值;另一方面,它中序遍歷正好就是給定序列。比如,對于序列7、2、12、1、10、5、15、3,下圖就是一棵相應(yīng)笛卡爾樹。現(xiàn)輸入序列規(guī)模n(1≤n<100)和序列n個(gè)元素,試求其相應(yīng)笛卡爾樹深度d(根節(jié)點(diǎn)深度為1),以及有多少個(gè)葉節(jié)點(diǎn)深度為d。第10頁第10頁11ConstSIZE=100;INFINITY=1000000;varn,maxDeep,num,i:integer;a:array[1..SIZE]ofinteger;Proceduresolve(left,right,deep:integer);vari,j,min:integer;beginifdeep>maxDeepthenbeginmaxDeep:=deep;num:=1;endelseifdeep=maxDeepthen

第11頁第11頁12

;min:=INFINITY;Fori:=lefttorightdoifmin>a[i]thenbeginmin:=a[i];

;end;ifleft<jthen

;ifj<rightthen①inc(num)(或num:=num+1)②j:=i③solve(left,j-1,deep+1)第12頁第12頁13

;end;beginreadln(n);fori:=1tondoread(a[i]);maxDeep:=0;solve(1,n,1);writeln(maxDeep,'',num);end.④solve(j+1,right,deep+1)第13頁第13頁14

4.將2n個(gè)0和2n個(gè)1,排成一圈。從任一個(gè)位置開始,每次按逆時(shí)針方向以長度為n+1數(shù)二進(jìn)制數(shù)。要求給出一個(gè)排法,用上面辦法產(chǎn)生出來2n+1個(gè)二進(jìn)制數(shù)都不相同。當(dāng)n=2時(shí),即有22個(gè)0和22個(gè)1排列如右下:第14頁第14頁15比如,從A位置開始,逆時(shí)針方向取三個(gè)數(shù)000,然后再從B位置上開始取三個(gè)數(shù)001,接著取010……能夠得到000,001,010,101,011,111,110共8個(gè)二進(jìn)制數(shù),并且都不相同。程序闡明:以N=4為例,即有16個(gè)0、16個(gè)1,數(shù)組A用以統(tǒng)計(jì)32個(gè)0、1排法,數(shù)組B統(tǒng)計(jì)二進(jìn)制數(shù)是否已出現(xiàn)過。本題利用二進(jìn)制加法運(yùn)算原理。A數(shù)組存儲(chǔ)每位二進(jìn)制數(shù),B數(shù)組用于判斷所產(chǎn)生數(shù)是否重復(fù)為了減少循環(huán)次數(shù),程序中將最后五位置1,前面五位置0第15頁第15頁16PROGRAMNO100;VARA:ARRAY[1..36]OF0..1;B:ARRAY[0..31]OFINTEGER;I,J,K,S,P:INTEGER;BEGINFORI:=1TO36DOA[I]:=0;FORI:=28TO32DOA[I]:=1;P:=1;A[6]:=1;WHILE(P=1)DOBEGINJ:=27;第16頁第16頁17WHILEA[J]=1DOJ:=J─1;

FORI:=J+1TO27DOFORI:=0TO31DOB[I]:=0;FORI:=1TO32DO

begin

FORK:=ITOI+4DO

S:=S*2+A[K];END;S:=0;

②①

③④第17頁第17頁18

FORI:=0TO31DOS:=S+B[I];IF

THENP:=0;END;FORI:=1TO32DOFORJ:=ITOI+4DOWRITE(A[J]);WRITELN;END.A[J]:=1;A[I]:=0;S:=0;B[S]:=1;S=32進(jìn)制理解與應(yīng)用第18頁第18頁195、初中,問題:多項(xiàng)式乘法運(yùn)算:P(X)=2X2---x+1,q(x)=x+1p(x)*q(x)=(2x2—x+1)*(x+1)=2x3+X2-+1闡明:多項(xiàng)式表示:系數(shù)、指數(shù)如上例中P(X)系數(shù)指數(shù)Q(X)系數(shù)指數(shù)2211-111010000

0第19頁第19頁20P*Q結(jié)果存入C中。其輸出格式是:依次用一對括號(hào)內(nèi)(系數(shù)、指數(shù))分別來表示。如上例輸出結(jié)果表示為:(2,3)(1,2)(1,0)程序清單:

PROGRAMNO100_7;VARI,J,K,L,JP,JQ,JC,X,Y,X1,Y1:INTEGER;P,Q:ARRAY[1..10,1..2]OFINTEGER;C:ARRAY[1..20,1..2]OFINTEGER;第20頁第20頁21BEGINJP:=0;READLN(X,Y);WHILEX<>0DO

BEGIN

JP:=JP+1;P[JP,1]:=X;P[JP,2]:=Y;READLN(X,Y);END;

JQ:=0;

第21頁第21頁22

READLN(X,Y);

WHILEX<>0DOBEGINJQ:=JQ+1;Q[JQ,1]:=X;Q[JQ,2]:=Y;READLN(X,Y);END;JC:=1;C[JC,1]:=0;C[JC,2]:=-1000;

第22頁第22頁23FORI:=1TOJPDOBEGIN

Y:=P[I,2];FORJ:=1TOJQDOBEGIN

②;Y1:=Y+Q[J,2];K:=1;

WHILEY1<C[K,2]DOK:=K+1;

IFY1=C[K,2]THEN③

ELSE

BEGIN

第23頁第23頁24FORL:=JCDOWNTOKDOBEGIN

C[L+1,1]:=C[L,1];C[L+1,2]:=C[L,2];END;

C[K,1]:=X1;C[K,2]:=Y1;

④END;

END;

END;

FORI:=1TOJCDOIF⑤THENWRITE(‘(’,C[I,1],‘,’,C[I,2],‘)’);

READLN;END.X:=P[I,1];X1:=X*Q[J,1];C[K,1]:=C[K,1]+X1;JC:=JC+1;C[I,1]<>0歸并算法思想第24頁第24頁256、在A,B兩個(gè)城市之間設(shè)有N個(gè)路站(以下圖中S1,且N<100),城市與路站之間、路站和路站之間各有若干條路段(各路段數(shù)≤20,且每條路段上距離均為一個(gè)整數(shù))。第25頁第25頁26A,B一條通路是指:從A出發(fā),可經(jīng)過任一路段抵達(dá)S1,再從S1出發(fā)經(jīng)過任一路段,…最終抵達(dá)B。通路上路段距離之和稱為通路距離(最大距離≤1000)。當(dāng)全部路段距離給出之后,求出全部不同距離通路個(gè)數(shù)(相同距離僅記一次)。比如:下圖所表示是當(dāng)N=1時(shí)情況:第26頁第26頁27從A到B通路條數(shù)為6,但因其中通路5+5=4+6,因此滿足條件不同距離通路條數(shù)為5。算法說明:本題采取窮舉算法。數(shù)據(jù)結(jié)構(gòu):N:統(tǒng)計(jì)A,B間路站個(gè)數(shù)

數(shù)組D[I,0]統(tǒng)計(jì)第I-1到第I路站間路段個(gè)數(shù)D[I,1],D[I,2],…統(tǒng)計(jì)每個(gè)路段距離

數(shù)組G統(tǒng)計(jì)可取到距離第27頁第27頁28程序清單:

PROGRAMCHU7_6;

VARI,J,N,S:INTEGER;

B:ARRAY[0..100]OFINTEGER;

D:ARRAY[0..100,0..20]OFINTEGER;

G:ARRAY[0..1000]OF0..1;第28頁第28頁29BEGIN

READLN(N);

FORI:=1TON+1DO

BEGIN

READLN(D[I,0]);

FORJ:=1TOD[I,0]DO

READLN(D[I,J]);

END;

D[0,0]:=1;

FORI:=1TON+1DO

B[I]:=1;

B[0]:=0;

FORI:=0TO1000DO

G[I]:=0;

WHILE①DO第29頁第29頁30BEGIN

S:=0;

FORI:=1TON+1DO

S:=②

G[S]:=1;J:=N+1;

WHILE③DOJ:=J-1;

B[J]:=B[J]+1;

FORI:=J+1TON+1DO

B[I]:=1;

END;

S:=0;

FORI:=1TO1000DO

④;

WRITELN(S);READLN;

END.B[0]=0;S+D[I,B[I]];B[J]=D[J,0];S:=S+G[I];窮舉算法應(yīng)用第30頁第30頁31

7、問題描述:將n個(gè)整數(shù)分成k組(k≤n,要求每組不能為空),顯然這k個(gè)部分均可得到一個(gè)各自和s1,s2,……sk,定義整數(shù)P為:P=(S1-S2)2+(S1-S3)2+…+(S1-Sk)2+(s2-s3)2+…+(Sk-1-Sk)2問題求解:求出一個(gè)分法,使P為最小(若有各種方案僅記一個(gè)〉程序闡明:數(shù)組:a[1],a[2],...A[N]存儲(chǔ)原數(shù)s[1],s[2],...,s[K]存儲(chǔ)每個(gè)部分和b[1],b[2],...,b[N]窮舉用暫時(shí)空間d[1],d[2],...,d[N]存儲(chǔ)最佳方案程序:第31頁第31頁32programexp4;Vari,j,n,k:integer;a:array[1..100]ofinteger;b,d:array[0..100]ofinteger;s:array[1..30]ofinteger;beginreadln(n,k);forI:=1tondoread(a[I]);forI:=0tondob[I]:=1;cmin:=1000000;while(b[0]=1)do第32頁第32頁33beginforI:=1tokdo①forI:=1tondo

②sum:=0;ForI:=1tok-1doforj:=③sum:=sum+(s[I]-s[j])*(s[I]-s[j]);if④thenbegincmin:=sum;forI:=1tondod[I]:=b[I];

第33頁第33頁34end;j:=n;while⑤doj:=j-1;b[j]:=b[j]+1;forI:=j+1tondo⑥end;writeln(cmin);forI:=1tondowrite(d[I]:4);writeln;end.

(1)

S[I]:=0;(2)S[b[I]]:=s[b[i]]+a[I];(3)

I+1tokdo(4)

(cmin>sum)(5)

b[j]=k(6)

b[I]:=1;應(yīng)用進(jìn)制辦法搜索第34頁第34頁358、工廠在天天生產(chǎn)中,需要一定數(shù)量零件,同時(shí)也能夠知道天天生產(chǎn)一個(gè)零件生產(chǎn)單價(jià)。在N天生產(chǎn)中,當(dāng)日生產(chǎn)零件能夠滿足當(dāng)日需要,若當(dāng)日用不完,能夠放到下一天去使用,但要收取每個(gè)零件保管費(fèi),不同天收取費(fèi)用也不相同。問題求解:求得一個(gè)N天生產(chǎn)計(jì)劃(即N天中天天應(yīng)生產(chǎn)零件個(gè)數(shù)),使總費(fèi)用最少。(窮舉算法)輸入:N(天數(shù)N<=29)天天需求量(N個(gè)整數(shù))天天生產(chǎn)零件單價(jià)(N個(gè)整數(shù))天天保管零件單價(jià)(N個(gè)整數(shù))第35頁第35頁36輸出:天天生產(chǎn)零件個(gè)數(shù)(N個(gè)整數(shù))比如:當(dāng)N=3時(shí),其需要量與費(fèi)用下列:

第一天第二天第三天需要量251530生產(chǎn)單價(jià)203032保管單價(jià)5l00生產(chǎn)計(jì)劃安排能夠有許多方案,下列面三種:第一天第二天第三天總費(fèi)用25153025*2O+15*30+30*32=19104003040*20+15*5+30*32=1835700070*20+45*5+30*10=1925第36頁第36頁37程序闡明:b[n]:存儲(chǔ)天天需求量,c[n]:天天生產(chǎn)零件單價(jià)d[n]:天天保管零件單價(jià),e[n]:生產(chǎn)計(jì)劃程序:Programexp5;Vari,j,n,yu,j0,j1,s:integer;b,c,d,e:array[0..30]ofinteger;beginreadln(n);fori:=1tondoreadln(b[[i],c[I],d[i]);第37頁第37頁38Fori:=1tondoe[i]:=0;

①:=10000;c[n+2]:=0;b[n+1]:=0;j0:=1;While(j0<=n)dobeginyu:=c[j0];j1:=j0;s:=b[j0];while②dobegin

③j1:=j1+1;s:=s+b[j1];end;

④j0:=j1+1;end;Fori:=1tondo⑤

readln;end.(1)

c[n+1](2)

(yu+d[j1)])<(c[j1+1])(3)

yu:=yu+d[j1];(4)

e[j0]:=s;(5)

write(e[I],’‘);第38頁第38頁399、問題描述:有n種基本物質(zhì)(n≤10),分別記為P1,P2,……,Pn,用n種基本物質(zhì)結(jié)構(gòu)物品,這些物品使用在k個(gè)不同地域(k≤20),每個(gè)地域?qū)ξ锲诽岢鲎约阂?這些要求用一個(gè)n位數(shù)表示:α1α2……αn,其中:αi=1表示所需物質(zhì)中必須有第i種基本物質(zhì)=-1表示所需物質(zhì)中必須不能有第i種基本物質(zhì)r=0無所謂問題求解:當(dāng)k個(gè)不同地域要求給出之后,給出一個(gè)方案,指出哪些物質(zhì)被使用,哪些物質(zhì)不被使用。程序說明:數(shù)組b[1],b[2],...,b[nJ表示某種物品a[1..k,1..n]統(tǒng)計(jì)k個(gè)地域?qū)ξ锲芬?其中:a[I,j]=1表示第i個(gè)地域?qū)Φ趈種物品是需要a[i,j]=0表示第i個(gè)地域?qū)Φ趈種物品是無所謂a[i,j]=-1表示第i個(gè)地域?qū)Φ趈種物品是不需要第39頁第39頁40Programgxp2;Vari,j,k,n:integer;p:boolean;b:array[0..20]of0..1;a:array[1..20,1..10]dinteger;beginreadln(n,k);fori:=1tokdobeginforj:=1tondoread(a[i,j]);readln;end;第40頁第40頁41fori:=0tondob[i]:=0;p:=true;while①dobeginj:=n;whileb[j]=1doj:=j-1;

for

i:=j+1

to

n

do

b[I]:=0;

(3)Pand(b[0]=0)b[j]:=1;p:=false;第41頁第41頁42for

i:=1

to

k

do

For

j:=1

to

n

doif(a[i,j]=1)and(b[j]=0)or④

thenp:=true;end;if⑤thenwriteln('找不到!‘)elsefori:=1tondoif(b[i]=1)thenwriteln('物質(zhì)',I,’需要')elsewriteln('物質(zhì)',i,'不需要');end.(4)(a[I,j]=-1)and(b[j]=1)(5)p第42頁第42頁4310、回形排列(5個(gè)空,每空2分共10分)【問題描述】:給出一個(gè)N((1≤N≤20),得到一個(gè)N*N回形排列方陣。比如:當(dāng)N=5時(shí),得到回形排列方陣為:12345161718196152425207142322218131211109第43頁第43頁44輸入N,輸出N*N方陣【程序闡明】A:ARRAY[1..20,1..20]OFINTEGER;存儲(chǔ)填入數(shù)K:INTEGER;每次填入數(shù);programcup_7;vari,j,k,n,n1:integer;a:array[1..20,1..20]ofinteger;beginreadln(n);n1:=ndiv2;①;

fori:=1ton1dobeginforj:=iton-idobegin②;

k:=k+1;end;forj:=iton-Idobegin③k:=k+1;end;第44頁第44頁45

forj:=n-i+1

downto

i+1

do

begin④;

k:=k+1;end;forj:=n-i+1downtoi+1dobegina[j,i]:=k;k:=k+1;end;end;if⑤thena[(n+1)div2,(n+1)div2]:=k;fori:=1tondobeginforj:=1tondowrite(a[i,j]:4);writeln;end;end.第45頁第45頁46回形矩陣(1)K:=1;(2)a[I,j]:=k;(3)a[j,n-i+1]:=k;(4)a[n-i+1,j]:=k;(5)odd(n)數(shù)字陣列,坐標(biāo)與元素之間關(guān)系第46頁第46頁47

11.(子矩陣)輸入一個(gè)n1*m1矩陣a,和n2*m2矩陣b,問a中是否存在子矩陣和b相等。若存在,輸出所有子矩陣左上角坐標(biāo);若不存在輸出“Thereisnoanswer”ConstSIZE=50;varn1,m1,n2,m2,i,j,k1,k2:integer;a,b:array[1..SIZE,1..SIZE]ofinteger;good,haveAns:boolean;beginreadln(n1,m1);fori:=1ton1doforj:=1tom1doread(a[i][j]);readln(n2,m2);fori:=1ton2do第47頁第47頁48Forj:=1tom2do

①;haveAns:=false;Fori:=1ton1-n2+1doForj:=1to②dobegin③;fork1:=1ton2dofork2:=1to④doifa[i+k1–1,j+k2-1]<>b[k1,k2]thengood:=false;第48頁第48頁49ifgoodthenbeginwriteln(i,'',j);

⑤;

end;end;ifnothaveAnsthenwriteln('Thereisnoanswer');end.①read(b[i][j])②m1-m2+1③good:=true④m2⑤haveAns:=true第49頁第49頁50

12、自然數(shù)拆分:

programp_11;constm=100;vars:array[1..m]of0..m;n,I,j,sum,count:integer;procedureprint;vark:integr;begincount:=count+1;write(count,‘:’,n,‘=‘,s[1]);fork:=2toIdowrite(‘+’,s[k]);writeln;end;第50頁第50頁51beginreadln(n);I:=1;sum:=0;j:=0;count:=0;RepeatJ:=j+1;Sum:=sum+j;If(1)thenBeginS[I]:=(2);Ifsum=nthenBeginPrint;Sum:=(3);I:=I-1;Sum:=(4);(1)Sum<=n(2)J(3)Sum-s[I];(4)Sum-s[I];回溯算法應(yīng)用第51頁第51頁52J:=s[i];endEndElsebeginI:=I+1;j:=s[I-1]-1;endElsebegin

Sum:=(5);I:=(6);sum:=(7);J:=s[I];end;Untili=0End.(5)Sum-j(6)I-1(7)Sum-s[I]第52頁第52頁53自然數(shù)拆分比較好算法:

programp1_5(input,output);Vara,b:array[1..100]ofbyte;n:integer;proceduretry(m,start,k:integer);vari,j:integer;beginfori:=startto(mdiv2)dobegina[k]:=m-i;b[k]:=i;forj:=1tokdowrite(b[j],'+');第53頁第53頁54writeln(a[k]);try(a[k],i,k+1)end;end;beginreadln(n);try(n,1,1)end.第54頁第54頁55

13、(選排列)下面程序功效是利用遞歸辦法生成從1到n(n<10)n個(gè)數(shù)中取k(1<=k<=n)個(gè)數(shù)所有也許排列(不一定按升序輸出)。比如,當(dāng)n=3,k=2時(shí),應(yīng)當(dāng)輸出(每行輸出5個(gè)排列):121321233231第55頁第55頁56Programex501;Vari,n,k:integer;a:array[1..10]ofinteger;count:longint;Procedureperm2(j:integer);vari,p,t:integer;beginif①thenbeginfori:=ktondobegininc(count);t:=a[k];a[k]:=a[i];a[i]:=t;第56頁第56頁57for②dowrite(a[p]:1);write('');t:=a[k];a[k]:=a[i];a[i]:=t;if(countmod5=0)thenwriteln;end;exit;end;第57頁第57頁58fori:=jtondobegint:=a[j];a[j]:=a[i];a[i]:=t;

③;t:=a[j];④;endend;beginwriteln('Entryn,k(k<=n):');read(n,k);count:=0;

for

i:=1ton

doa[i]:=i;

;end.第58頁第58頁5913、選排列①

j=k(或k=j)②

p:=1tok③perm2(j+1)④

a[j]:=a[i];a[i]:=t⑤

perm2(1)回溯算法應(yīng)用第59頁第59頁6014.(大整數(shù)開方)輸入一個(gè)正整數(shù)n(1≤n<10100),試用二分法計(jì)算它平方根整數(shù)部分。constSIZE=200;typehugeint=recordlen:integer;num:array[1..SIZE]ofinteger;end;//len表示大整數(shù)位數(shù);num[1]表示個(gè)位、num[2]表示十位,以這類推vars:string;i:integer;

target,left,middle,right:hugeint;

第60頁第60頁61Functiontimes(a,b:hugeint):hugeint;//計(jì)算a和b積vari,j:integer;ans:hugeint;beginfillchar(ans,sizeof(ans),0);fori:=1toa.lendoforj:=1tob.lendo①:=ans.num[i+j-1]+a.num[i]*b.num[j];fori:=1toa.len+b.lendobeginans.num[i+1]:=ans.num[i+1]+ans.num[i]div10;

②;ifans.num[a.len+b.len]>0thenans.len:=a.len+b.lenelseans.len:=a.len+b.len-1;end;times:=ans;end;第61頁第61頁62functionadd(a,b:hugeint):hugeint;//計(jì)算a和b和vari:integer;ans:hugeint;beginfillchar(ans.num,sizeof(ans.num),0);ifa.len>b.lenthenans.len:=a.lenelseans.len:=b.len;Fori:=1toans.lendobeginans.num[i]:=③;

第62頁第62頁63

ans.num[i+1]:=ans.num[i+1]+ans.num[i]div10;ans.num[i]:=ans.num[i]mod10;end;Ifans.num[ans.len+1]>0theninc(ans.len);add:=ans;end;第63頁第63頁64Functionaverage(a,b:hugeint):hugeint;//計(jì)算大整數(shù)a和b平均數(shù)整數(shù)部分vari:integer;ans:hugeint;beginans:=add(a,b);fori:=ans.lendownto2dobeginans.num[i-1]:=ans.num[i-1]+(④)*10;ans.num[i]:=ans.num[i]div2;end;ans.num[1]:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論