算法第四版習(xí)題答案解析_第1頁(yè)
算法第四版習(xí)題答案解析_第2頁(yè)
算法第四版習(xí)題答案解析_第3頁(yè)
算法第四版習(xí)題答案解析_第4頁(yè)
算法第四版習(xí)題答案解析_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

..1.1.1給出以下表達(dá)式的值:a.<0+15>/2b.2.0e-6*100000000.1c.true&&false||true&&true答案:a.7,b.200.0000002c.ture1.1.2給出以下表達(dá)式的類型和值:a.<1+2.236>/2b.1+2+3+4.0c.4.1>=4d.1+2+"3"答案:a.1.618b.10.0c.trued.33編寫一個(gè)程序,從命令行得到三個(gè)整數(shù)參數(shù)。如果它們都相等則打印equal,否則打印notequal。publicclassTestUqual{publicstaticvoidmain<String[]args> {inta,b,c; a=b=c=0; StdOut.println<"Pleaseenterthreenumbers">;a=StdIn.readInt<>; b=StdIn.readInt<>; c=StdIn.readInt<>;if<equals<a,b,c>==1> { StdOut.print<"equal">; }else { StdOut.print<"notequal">; } }publicstaticintequals<inta,intb,intc> {if<a==b&&b==c> {return1; }else {return0; } }}下列語(yǔ)句各有什么問題〔如果有的話?a.if<a>b>thenc=0;b.ifa>b{c=0;}c.if<a>b>c=0;d.if<a>b>c=0elseb=0;答案:a.if<a>b>c=0;b.if<a>b>{c=0;}編寫一段程序,如果double類型的變量x和y都嚴(yán)格位于0和1之間則打印true,否則打印false。publicclassTestUqual{publicstaticvoidmain<String[]args> {doublex;doubley;x=StdIn.readDouble<>;y=StdIn.readDouble<>;StdOut.print<compare<x>&&compare<y>>;}publicstaticbooleancompare<doublex>{If<x>0&&x<1>returenture;elsereturnfalse;}}1.1.6下面這段程序會(huì)打印出什么?intf=0;intg=1;for<inti=0;i<=15;i++>{StdOut.println<f>;f=f+g;g=f-g;}答案:011235813213455891442333776101.1.7分別給出以下代碼段打印出的值:a.doublet=9.0;while<Math.abs<t-9.0/t>>.001>t=<9.0/t+t>/2.0;StdOut.printf<"%.5f\n",t>;sum=0;for<inti=1;i<1000;i++>for<intj=0;j<i;j++>sum++;StdOut.println<sum>;sum=0;for<inti=1;i<1000;i*=2>for<intj=0;j<1000;j++>sum++;StdOut.println<sum>;答案:a.3.00009b.499500c.100001.1.8下列語(yǔ)句會(huì)打印出什么結(jié)果?給出解釋。a.System.out.println<'b'>;b.System.out.println<'b'+'c'>;c.System.out.println<<char><'a'+4>>;答案:a.bb.197c.e1.1.9編寫一段代碼,將一個(gè)正整數(shù)N用二進(jìn)制表示并轉(zhuǎn)換為一個(gè)String類型的值s。解答:Java有一個(gè)內(nèi)置方法Integer.toBinaryString<N>專門完成這個(gè)任務(wù),但該題的目的就是給出這個(gè)方法的其他實(shí)現(xiàn)方法。下面就是一個(gè)特別簡(jiǎn)潔的答案:Strings="";for<intn=N;n>0;n/=2>s=<n%2>+s;1.1.10下面這段代碼有什么問題?int[]a;for<inti=0;i<10;i++>a[i]=i*i;解答:它沒有用new為a[]分配內(nèi)存。這段代碼會(huì)產(chǎn)生一個(gè)variableamightnothavebeeninitialized的編譯錯(cuò)誤。編寫一段代碼,打印出一個(gè)二維布爾數(shù)組的內(nèi)容。其中,使用*表示真,空格表示假。打印出行號(hào)和列號(hào)。publicclassTest{publicTest<>{//TODOAuto-generatedconstructorstub }publicstaticvoidmain<String[]args>{//TODOAuto-generatedmethodstubboolean[][]a=newboolean[10][10]; a=RandomInitial<a>;//隨機(jī)初始化TestPrint<a>;//打印數(shù)組 }publicstaticvoidTestPrint<boolean[][]a> {for<inti=0;i<a.length;i++>//打印行號(hào) StdOut.print<""+i>; StdOut.println<"">;for<inti=0;i<10;i++> { StdOut.print<i>;for<intj=0;j<10;j++> {if<a[i][j]> StdOut.print<"*"+"">;else StdOut.print<""+"">; } StdOut.println<"">; } }publicstaticboolean[][]RandomInitial<boolean[][]a> {for<inti=0;i<a.length;i++> {for<intj=0;j<a.length;j++> {if<StdRandom.bernoulli<0.1>> a[i][j]=true;else a[i][j]=false; } }returna; }}1.1.12以下代碼段會(huì)打印出什么結(jié)果?int[]a=newint[10];for<inti=0;i<10;i++>a[i]=9-i;for<inti=0;i<10;i++>a[i]=a[a[i]];for<inti=0;i<10;i++>System.out.println<i>;答案:0123456789如System.out.println<a[i]>;01234432101.1.13編寫一段代碼,打印出一個(gè)M行N列的二維數(shù)組的轉(zhuǎn)置〔交換行和列。publicclassMigrate{publicMigrate<>{//TODOAuto-generatedconstructorstub }publicstaticvoidmain<String[]args>{//TODOAuto-generatedmethodstubintm=5;intn=5;int[][]a=newint[m][n];int[][]b=newint[n][m];a=RandomInitial<a,n>;//初始化二維數(shù)組b=MigrateArrays<a,b>;//轉(zhuǎn)置二維數(shù)組MigratePrint<b>;//輸出轉(zhuǎn)置二維數(shù)組 }publicstaticvoidMigratePrint<int[][]a> { StdOut.println<"輸出轉(zhuǎn)置二維數(shù)組:">;for<inti=0;i<a.length;i++> { for<intj=0;j<a[0].length;j++> { StdOut.print<a[i][j]+"">; } StdOut.println<>;} } publicstaticint[][]MigrateArrays<int[][]a,int[][]b> {for<inti=0;i<a.length;i++> {for<intj=0;j<a[0].length;j++> { b[j][i]=a[i][j]; } }returnb; }publicstaticint[][]RandomInitial<int[][]a,intN> { StdOut.println<"初始化二維數(shù)組:">;for<inti=0;i<a.length;i++> { for<intj=0;j<a[0].length;j++> { a[i][j]=StdRandom.uniform<N>; StdOut.print<a[i][j]+"">; } StdOut.println<>; }returna; }}1.1.14編寫一個(gè)靜態(tài)方法lg<>,接受一個(gè)整型參數(shù)N,返回不大于log2N的最大整數(shù)。不要使用Math庫(kù)。publicstaticintlga<intN,intM> {inta=0;while<N>=M> { N=N/M; a++; }returna; }編寫一個(gè)靜態(tài)方法histogram<>,接受一個(gè)整型數(shù)組a[]和一個(gè)整數(shù)M為參數(shù)并返回一個(gè)大小為M的數(shù)組,其中第i個(gè)元素的值為整數(shù)i在參數(shù)數(shù)組中出現(xiàn)的次數(shù)。如果a[]中的值均在0到M-1之間,返回?cái)?shù)組中所有元素之和應(yīng)該和a.length相等。publicstaticint[]histogram<int[]a,intM> {int[]b=newint[M];intn=0;intm=0;for<inti=0;i<M;i++> {for<intj=0;j<a.length;j++> {if<i==a[j]> { n++; } b[i]=n; } n=0; }for<inti=0;i<M;i++> { m=m+b[i]; }returnb; }1.1.16給出exR1<6>的返回值:publicstaticStringexR1<intn>{if<n<=0>return"";returnexR1<n-3>+n+exR1<n-2>+n;}答案:1.1.17找出以下遞歸函數(shù)的問題:publicstaticStringexR2<intn>{Strings=exR2<n-3>+n+exR2<n-2>+n;if<n<=0>return"";returns;}答:這段代碼中的基礎(chǔ)情況永遠(yuǎn)不會(huì)被訪問。調(diào)用exR2<3>會(huì)產(chǎn)生調(diào)用exR2<0>、exR2<-3>和exR2<-6>,循環(huán)往復(fù)直到發(fā)生StackOverflowError??梢孕薷臑椋簆ublicstaticStringexR2<intn>{if<n<=0>return"";Strings=exR2<n-3>+n+exR2<n-2>+n;returns;}1.1.18請(qǐng)看以下遞歸函數(shù):publicstaticintmystery<inta,intb>{if<b==0>return0;if<b%2==0>returnmystery<a+a,b/2>;returnmystery<a+a,b/2>+a;}mystery<2,25>和mystery<3,11>的返回值是多少?給定正整數(shù)a和b,mystery<a,b>計(jì)算的結(jié)果是什么?將代碼中的+替換為*并將return0改為return1,然后回答相同的問題。答案:50,33.2253111.1.19在計(jì)算機(jī)上運(yùn)行以下程序:publicclassFibonacci{publicstaticlongF<intN>{if<N==0>return0;if<N==1>return1;returnF<N-1>+F<N-2>;}publicstaticvoidmain<String[]args>{for<intN=0;N<100;N++>StdOut.println<N+""+F<N>>;}}計(jì)算機(jī)用這段程序在一個(gè)小時(shí)之內(nèi)能夠得到F<N>結(jié)果的最大N值是多少?開發(fā)F<N>的一個(gè)更好的實(shí)現(xiàn),用數(shù)組保存已經(jīng)計(jì)算過的值。publicclassFibonacci{publicstaticlongF<intN>{if<N==0>return0;if<N==1>return1;returnF<N-1>+F<N-2>;}publicstaticvoidmain<String[]args>{int[]a=newint[100];a=A<a>;}publicstaticlong[]A<int[]a>{ a[0]=0;a[1]=1;for<intN=2;N<100;N++> {a[N]=a[N-1]+a[N-2];StdOut.println<N+""+a[N]>; }}1.1.20編寫一個(gè)遞歸的靜態(tài)方法計(jì)算ln<N!>的值。publicstaticdoublefactorialln<longN>{if<N>1>returnMath.ln<N>+factorialln<N-1>;elsereturn0; }編寫一段程序,從標(biāo)準(zhǔn)輸入按行讀取數(shù)據(jù),其中每行都包含一個(gè)名字和兩個(gè)整數(shù)。然后用printf<>打印一張表格,每行的若干列數(shù)據(jù)包括名字、兩個(gè)整數(shù)和第一個(gè)整數(shù)除以第二個(gè)整數(shù)的結(jié)果,精確到小數(shù)點(diǎn)后三位??梢杂眠@種程序?qū)羟蚯蚴值膿羟蛎新驶蛘邔W(xué)生的考試分?jǐn)?shù)制成表格。publicclassScoreTable{publicstaticvoidmain<String[]args>{ Strings="Let'sgoforlunch!"; Inin=newIn<"Se">;String[]whitelist=in.readAllStrings<>;//將文件中的字符串讀取到數(shù)組中for<inti=0;i<whitelist.length;i=i+3>{ StdOut.print<whitelist[i]+""+whitelist[i+1]+""+whitelist[i+2]+"">;doublem=Double.parseDouble<whitelist[i+1]>;doublen=Double.parseDouble<whitelist[i+2]>; StdOut.printf<"0.3%",m/n>; StdOut.println<"">;}}}使用節(jié)中的rank<>遞歸方法重新實(shí)現(xiàn)BinarySearch并跟蹤該方法的調(diào)用。每當(dāng)該方法被調(diào)用時(shí),打印出它的參數(shù)lo和hi并按照遞歸的深度縮進(jìn)。提示:為遞歸方法添加一個(gè)參數(shù)來(lái)保存遞歸的深度。為BinarySearch的測(cè)試用例添加一個(gè)參數(shù):+打印出標(biāo)準(zhǔn)輸入中不在白名單上的值;-,則打印出標(biāo)準(zhǔn)輸入中在白名單上的值。publicstaticintrank<intkey,int[]a,charc>{intlo=0;inthi=a.length-1;if<c=='+'>{while<lo<=hi>{//Keyisina[lo..hi]mid=lo+<hi-lo>/2;if<key<a[mid]>hi=mid-1;elseif<key>a[mid]>lo=mid+1;elsereturnmid;}return-1;}if<c=='-'>{while<lo<=hi>{//Keyisina[lo..hi]mid=lo+<hi-lo>/2;if<key<a[mid]>hi=mid-1;elseif<key>a[mid]>lo=mid+1;elsereturn-1;}return0;}elsereturn-1;}給出使用歐幾里德算法計(jì)算105和24的最大公約數(shù)的過程中得到的一系列p和q的值。擴(kuò)展該算法中的代碼得到一個(gè)程序Euclid,從命令行接受兩個(gè)參數(shù),計(jì)算它們的最大公約數(shù)并打印出每次調(diào)用遞歸方法時(shí)的兩個(gè)參數(shù)。使用你的程序計(jì)算1111111和1234567的最大公約數(shù)。publicstaticintCommomDivisor<intx,inty> {if<x==1||y==1> {StdOut.println<"x="+x+"y="+y>;return1;}if<x<y> {inttemp=x; x=y; y=temp; } StdOut.println<"x="+x+"y="+y>;if<x%y==0> {returny; }else { x=x%y; StdOut.println<"x="+x>;returnCommomDivisor<x,y>; } }1.1.25使用數(shù)學(xué)歸納法證明歐幾里德算法能夠計(jì)算任意一對(duì)非負(fù)整數(shù)p和q的最大公約數(shù)。提高題將三個(gè)數(shù)字排序。假設(shè)a、b、c和t都是同一種原始數(shù)字類型的變量。證明以下代碼能夠?qū)、b、c按照升序排列:if<a>b>{t=a;a=b;b=t;}if<a>c>{t=a;a=c;c=t;}if<b>c>{t=b;b=c;c=t;}1.1.27二項(xiàng)分布。估計(jì)用以下代碼計(jì)算binomial<100,50>將會(huì)產(chǎn)生的遞歸調(diào)用次數(shù):publicstaticdoublebinomial<intN,intk,doublep>{if<N==0&&k==0>return1.0;andif<N<0||k<0>return0.0;return<1.0-p>*binomial<N-1,k,p>+p*binomial<N-1,k-1>;}將已經(jīng)計(jì)算過的值保存在數(shù)組中并給出一個(gè)更好的實(shí)現(xiàn)。估計(jì)遞歸調(diào)用次數(shù):100!publicstaticdoublebinomial<intN,intk,doublep> {cnt++; StdOut.println<"N="+N+"k="+k+"p="+p>;if<N==0&&k==0> { StdOut.println<"N==0&&k==0">;return1.0; }if<N<0||k<0>{ StdOut.println<"N<0||k<0">;return0;}return<1.0-p>*binomial<N-1,k,p>+p*binomial<N-1,k-1,p>; }值保存在數(shù)組中的實(shí)現(xiàn)方法:publicstaticvoidbinomialArrays<intN,intK,doublep> {double[][]a=newdouble[N+1][K+1]; a[0][0]=1;for<intj=1;j<N+1;j++> { a[j][0]=a[j-1][0]*<1-p>; }for<inti=0;i<N+1;i++>for<intj=1;j<=i&&j<K+1;j++> { a[i][j]=<1-p>*a[i-1][j]+p*a[i-1][j-1]; } }思路:N列K行的數(shù)組:P<N,K>=〔1-pf<N-1,k>+p*f<N-1,K-1>f<N-1,K-1>f<N-1,k>f<N,K>1.1.28刪除重復(fù)元素。修改BinarySearch類中的測(cè)試用例來(lái)刪去排序之后白名單中的所有重復(fù)元素。publicstaticintcountC<int[]a>//排序后,統(tǒng)計(jì)重復(fù)數(shù)量{intcnt=0;for<inti=0;i<a.length-1;i++>if<a[i]==a[i+1]> { s++; }returncnt;}publicstaticint[]remove<int[]a,intcnt>{ints=0;int[]b=newint[a.length-cnt]; b[0]=a[0];for<inti=0;i<a.length-1;i++>if<a[i]==a[i+1]> { s++; }else{ b[i-s+1]=a[i+1]; }returnb;}等值鍵。為BinarySearch類添加一個(gè)靜態(tài)方法rank<>,它接受一個(gè)鍵和一個(gè)整型有序數(shù)組〔可能存在重復(fù)鍵作為參數(shù)并返回?cái)?shù)組中小于該鍵的元素?cái)?shù)量,以及一個(gè)類似的方法count<>來(lái)返回?cái)?shù)組中等于該鍵的元素的數(shù)量。注意:如果i和j分別是rank<key,a>和count<key,a>的返回值,那么a[i..i+j-1]就是數(shù)組中所有和key相等的元素。importjava.util.Arrays;publicclassBinarySearch2{publicBinarySearch2<>{//TODOAuto-generatedconstructorstub }/*返回小于key的元素?cái)?shù)量 **/publicstaticintrank<intkey,int[]a>{intlo=0;inthi=a.length-1;while<lo<=hi>{//Keyisina[lo..hi]mid=lo+<hi-lo>/2;if<key<a[mid]>hi=mid-1;elseif<key>a[mid]>lo=mid+1;else{while<a[mid]==a[mid-1]&&mid>0> mid--; returnmid;} }return-1;}publicstaticintcount<intkey,int[]a> {intcnt=0;inti=rank<key,a>;while<a[i]==a[i+1]&&i<a.length> { cnt++; i++; }returncnt; } publicstaticvoidmain<String[]args>{//TODOAuto-generatedmethodstub Inin=newIn<"tinyW">; int[]whitelist=in.readAllInts<>; Arrays.sort<whitelist>;intkey=StdIn.readInt<>;intcnt=rank<key,whitelist>; StdOut.println<"smallerthan"+key+"elementhave"+cnt>;intcntequal=count<key,whitelist>; StdOut.println<"equal"+key+"elementhave"+cntequal>; }}數(shù)組練習(xí)。編寫一段程序,創(chuàng)建一個(gè)N×N的布爾數(shù)組a[][]。其中當(dāng)i和j互質(zhì)時(shí)〔沒有相同因子,a[i][j]為true,否則為false。publicstaticboolean[][]TestArrays<boolean[][]a>// {intN=a.length;intM=a[0].length; StdOut.println<M+"=M"+"N="+N>;for<inti=0;i<N;i++>for<intj=0;j<M;j++> {if<gcd<i,j>==1> a[i][j]=true;else a[i][j]=false; }returna; }publicstaticintgcd<intm,intn> {if<m==0||n==0> {return1; }if<m%n==0> {returnn; }else {returngcd<n,m%n>; } }隨機(jī)連接。編寫一段程序,從命令行接受一個(gè)整數(shù)N和double值p〔0到1之間作為參數(shù),在一個(gè)圓上畫出大小為0.05且間距相等的N個(gè)點(diǎn),然后將每對(duì)點(diǎn)按照概率p用灰線連接。publicclassRandomAccess{publicRandomAccess<>{//TODOAuto-generatedconstructorstub }publicstaticvoiddrawcricle<doublex,doubley,doubler,intN,doublep,double[][]a> { StdDraw.setXscale<0,x*2>; StdDraw.setYscale<0,y*2>; StdDraw.setPenRadius<0.005>; StdDraw.setPenColor<StdDraw.RED>; StdDraw.circle<50,50,50>;for<inti=0;i<N;i++> {StdDraw.setPenRadius<0.05>; StdDraw.setPenColor<StdDraw.BLACK>;doublem=50-50*Math.cos<2*Math.PI*i/N>;doublen=50+50*Math.sin<2*Math.PI*i/N>; StdDraw.point<m,n>; a[i][0]=m; a[i][1]=n; StdDraw.setPenColor<StdDraw.RED>;// StdDraw.text<m,n,i+"m="+m+"n="+n>; } } publicstaticvoidRandomline<doublex,doubley,double[][]a> { StdDraw.setXscale<0,x*2>; StdDraw.setYscale<0,y*2>; StdDraw.setPenRadius<0.01>; StdDraw.setPenColor<StdDraw.LIGHT_GRAY>;intN=a.length;for<inti=0;i<N;i++>for<intj=0;j<N;j++> {if<StdRandom.bernoulli<0.5>> StdDraw.line<a[i][0],a[i][1],a[j][0],a[j][1]>; } }publicstaticvoidmain<String[]args>{doublex=50;doubley=50;doubler=50;intN=10;doublep=0.2;double[][]a=newdouble[N][2];//畫圓/描點(diǎn)drawcricle<x,y,r,N,p,a>;//畫線 Randomline<x,y,a>; }}直方圖。假設(shè)標(biāo)準(zhǔn)輸入流中含有一系列double值。編寫一段程序,從命令行接受一個(gè)整數(shù)N和兩個(gè)double值l和r。將<l,r>分為N段并使用StdDraw畫出輸入流中的值落入每段的數(shù)量的直方圖。publicclasshistogram{ /*將<l,r>分為N段 **/publicstaticdouble[]segmentation<intN,doublel,doubler,double[]a>{ if<N==0>return a;doubles=<r-l>/N; a[0]=l;for<inti=1;i<a.length;i++> { a[i]=a[i-1]+s; }returna;}publicstaticvoidmakehistogram<double[]a,double[]b,doublel,doubler>{int[]c=newint[a.length-1];for<inti=0;i<b.length;i++>for<intj=0;j<a.length-1;j++> {if<b[i]>=a[j]&&b[i]<a[j+1]> { c[j]++;continue; } }intN=c.length; StdDraw.setXscale<0,<r-l>*1.2>; StdDraw.setYscale<0,b.length/N*1.5>;for<inti=0;i<N;i++> { doublex=l+<r-l>/N*i;doubley=c[i]/2.0;doublerw=<r-l>/<2*N>;doublerh=c[i]/2.0; StdDraw.filledRectangle<x,y,rw,rh>; StdOut.print<c[i]+"">; } }publicstaticvoidmain<String[]args>{//TODOAuto-generatedmethodstubintN=10;//段數(shù)doublel=2;doubler=20;double[]a=newdouble[N+1];//記錄分段的節(jié)點(diǎn)double[]b=newdouble[N*N*N];//隨機(jī)產(chǎn)生一個(gè)數(shù)組,作為輸入數(shù)字。 a=segmentation<N,l,r,a>;for<inti=0;i<b.length;i++> { b[i]=StdRandom.uniform<l,r>; }makehistogram<a,b,l,r>; }}1.1.33矩陣庫(kù)。編寫一個(gè)Matrix庫(kù)并實(shí)現(xiàn)以下API:publicclassMatrixstaticdoubledot<double[]x,double[]y>向量點(diǎn)乘staticdouble[][]mult<double[][]a,double[][]b>矩陣和矩陣之積staticdouble[][]transpose<double[][]a>轉(zhuǎn)置矩陣staticdouble[]mult<double[][]a,double[]x>矩陣和向量之積staticdouble[]mult<double[]y,double[][]a>向量和矩陣之積編寫一個(gè)測(cè)試用例,從標(biāo)準(zhǔn)輸入讀取矩陣并測(cè)試所有方法。publicclassMatrix{publicMatrix<>{//TODOAuto-generatedconstructorstub }publicstaticdoubledot<double[]x,double[]y>//向量點(diǎn)乘 {doublea=0;if<x.length!=y.length> {returna;}//此處拋出異常for<inti=0;i<x.length;i++> a+=x[i]*y[i];returna; }publicstaticdouble[][]transpose<double[][]a>//轉(zhuǎn)置矩陣 {for<inti=0;i<a.length;i++> {for<intj=i;j<a[0].length;j++> {doubletemp=a[i][j]; a[i][j]=a[j][i]; a[j][i]=temp; } }returna; }/* *矩陣的乘積定義:一個(gè)n行m列的矩陣乘以一個(gè)m行p列的矩陣,得到的結(jié)果是一個(gè)n行p列的矩陣, *其中的第i行第j列位置上的數(shù)等于前一個(gè)矩陣第i行上的m個(gè)數(shù)與后一個(gè)矩陣第j列上的m個(gè)數(shù)對(duì)應(yīng) *相乘后所有m個(gè)乘積的和。 **/staticdouble[][]mult<double[][]a,double[][]b>//矩陣和矩陣之積 {intM=a[0].length;intN=a.length;intP=b[0].length;double[][]c=newdouble[M][P];if<M!=b.length> {}//此處拋出異常for<inti=0;i<N;i++>for<intj=0;j<P;j++> {for<intm=0;m<M;m++> c[i][j]+=a[i][m]*b[m][j]; }returnc; }publicstaticdouble[]mult<double[][]a,double[]x>//矩陣和向量之積 {intN=a.length;double[]c=newdouble[N];intM=a[0].length;if<M!=x.length> {}//此處拋出異常for<inti=0;i<N;i++> {for<intm=0;m<M;m++> c[i]+=a[i][m]*x[m]; }returnc; }publicstaticdouble[]mult<double[]y,double[][]a>//向量和矩陣之積 {intN=y.length;double[]c=newdouble[N];intM=y.length;if<M!=a[0].length> {}//此處拋出異常for<inti=0;i<N;i++> {for<intm=0;m<M;m++> c[i]+=a[i][m]*y[i]; }returnc; }publicstaticvoidPrint<double[][]a,Stringname> { StdOut.println<name+":">;for<inti=0;i<a.length;i++> {for<intj=0;j<a[0].length;j++> { StdOut.print<a[i][j]+"">; } StdOut.println<>;}StdOut.println<>; }publicstaticvoidPrint<double[][]a> {for<inti=0;i<a.length;i++> {for<intj=0;j<a[0].length;j++> { StdOut.print<a[i][j]+"">; } StdOut.println<>;} StdOut.println<>; }publicstaticvoidPrint<double[]a,Stringname> { StdOut.println<name+":">;for<inti=0;i<a.length;i++> { StdOut.print<a[i]+"">;if<<i+1>%10==0> StdOut.println<>;}StdOut.println<>; }publicstaticvoidPrint<double[]a> {for<inti=0;i<a.length;i++> { StdOut.print<a[i]+"">;if<<i+1>%10==0> StdOut.println<>;} StdOut.println<>; }publicstaticdouble[][]randominti<double[][]a> {intN=a.length;intM=a[0].length;for<inti=0;i<N;i++> {for<intj=0;j<M;j++> { a[i][j]=StdRandom.uniform<N+M>; } }returna; } publicstaticdouble[]randominti<double[]a> {intN=a.length;for<inti=0;i<N;i++> { a[i]=StdRandom.uniform<N>; }returna; } //測(cè)試用例publicstaticvoidmain<String[]args>{//TODOAuto-generatedmethodstubintN=5;intp=10;double[][]a=newdouble[N][N];double[][]b=newdouble[p][N];double[]c=newdouble[N];doubled=0;a=randominti<a>;b=randominti<b>;c=randominti<c>;d=dot<c,c>;Print<c,"c">;StdOut.print<"dot<c,c>:d="+d>;Print<a,"a">;Print<b,"b">;double[][]x=newdouble[a[0].length][a.length];x=transpose<a>;Print<x,"transpose<a>tox">;x=mult<a,b>;Print<x,"mult<a,b>">;double[]y=c;y=mult<a,c>;Print<y,"mult<a,c>">;y=mult<c,a>;Print<y,"mult<c,a>">; }}過濾。以下哪些任務(wù)需要〔在數(shù)組中,比如保存標(biāo)準(zhǔn)輸入中的所有值?哪些可以被實(shí)現(xiàn)為一個(gè)過濾器且僅使用固定數(shù)量的變量和固定大小的數(shù)組〔和N無(wú)關(guān)?在每個(gè)問題中,輸入都來(lái)自于標(biāo)準(zhǔn)輸入且含有N個(gè)0到1的實(shí)數(shù)。?打印出最大和最小的數(shù)?打印出所有數(shù)的中位數(shù)?打印出第k小的數(shù),k小于100?打印出所有數(shù)的平方和?打印出N個(gè)數(shù)的平均值?打印出大于平均值的數(shù)的百分比?將N個(gè)數(shù)按照升序打印?將N個(gè)數(shù)按照隨機(jī)順序打印實(shí)驗(yàn)題1.1.35模擬擲骰子。以下代碼能夠計(jì)算每種兩個(gè)骰子之和的準(zhǔn)確概率分布:intSIDES=6;double[]dist=newdouble[2*SIDES+1];for<inti=1;i<=SIDES;i++>for<intj=1;j<=SIDES;j++>dist[i+j]+=1.0;for<intk=2;k<=2*SIDES;k++>dist[k]/=36.0;dist[i]的值就是兩個(gè)骰子之和為i的概率。用實(shí)驗(yàn)?zāi)MN次擲骰子,并在計(jì)算兩個(gè)1到6之間的隨機(jī)整數(shù)之和時(shí)記錄每個(gè)值的出現(xiàn)頻率以驗(yàn)證它們的概率。N要多大才能夠保證你的經(jīng)驗(yàn)數(shù)據(jù)和準(zhǔn)確數(shù)據(jù)的吻合程度達(dá)到小數(shù)點(diǎn)后三

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論