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

下載本文檔

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

文檔簡介

..1.1.1給出以下表達式的值:a.<0+15>/2b.2.0e-6*100000000.1c.true&&false||true&&true答案:a.7,b.200.0000002c.ture1.1.2給出以下表達式的類型和值:a.<1+2.236>/2b.1+2+3+4.0c.4.1>=4d.1+2+"3"答案:a.1.618b.10.0c.trued.33編寫一個程序,從命令行得到三個整數(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; } }}下列語句各有什么問題〔如果有的話?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都嚴格位于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下面這段程序會打印出什么?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下列語句會打印出什么結(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編寫一段代碼,將一個正整數(shù)N用二進制表示并轉(zhuǎn)換為一個String類型的值s。解答:Java有一個內(nèi)置方法Integer.toBinaryString<N>專門完成這個任務,但該題的目的就是給出這個方法的其他實現(xià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)存。這段代碼會產(chǎn)生一個variableamightnothavebeeninitialized的編譯錯誤。編寫一段代碼,打印出一個二維布爾數(shù)組的內(nèi)容。其中,使用*表示真,空格表示假。打印出行號和列號。publicclassTest{publicTest<>{//TODOAuto-generatedconstructorstub }publicstaticvoidmain<String[]args>{//TODOAuto-generatedmethodstubboolean[][]a=newboolean[10][10]; a=RandomInitial<a>;//隨機初始化TestPrint<a>;//打印數(shù)組 }publicstaticvoidTestPrint<boolean[][]a> {for<inti=0;i<a.length;i++>//打印行號 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以下代碼段會打印出什么結(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編寫一段代碼,打印出一個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編寫一個靜態(tài)方法lg<>,接受一個整型參數(shù)N,返回不大于log2N的最大整數(shù)。不要使用Math庫。publicstaticintlga<intN,intM> {inta=0;while<N>=M> { N=N/M; a++; }returna; }編寫一個靜態(tài)方法histogram<>,接受一個整型數(shù)組a[]和一個整數(shù)M為參數(shù)并返回一個大小為M的數(shù)組,其中第i個元素的值為整數(shù)i在參數(shù)數(shù)組中出現(xiàn)的次數(shù)。如果a[]中的值均在0到M-1之間,返回數(shù)組中所有元素之和應該和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ǔ)情況永遠不會被訪問。調(diào)用exR2<3>會產(chǎn)生調(diào)用exR2<0>、exR2<-3>和exR2<-6>,循環(huán)往復直到發(fā)生StackOverflowError。可以修改為:publicstaticStringexR2<intn>{if<n<=0>return"";Strings=exR2<n-3>+n+exR2<n-2>+n;returns;}1.1.18請看以下遞歸函數(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>計算的結(jié)果是什么?將代碼中的+替換為*并將return0改為return1,然后回答相同的問題。答案:50,33.2253111.1.19在計算機上運行以下程序: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>>;}}計算機用這段程序在一個小時之內(nèi)能夠得到F<N>結(jié)果的最大N值是多少?開發(fā)F<N>的一個更好的實現(xiàn),用數(shù)組保存已經(jīng)計算過的值。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編寫一個遞歸的靜態(tài)方法計算ln<N!>的值。publicstaticdoublefactorialln<longN>{if<N>1>returnMath.ln<N>+factorialln<N-1>;elsereturn0; }編寫一段程序,從標準輸入按行讀取數(shù)據(jù),其中每行都包含一個名字和兩個整數(shù)。然后用printf<>打印一張表格,每行的若干列數(shù)據(jù)包括名字、兩個整數(shù)和第一個整數(shù)除以第二個整數(shù)的結(jié)果,精確到小數(shù)點后三位。可以用這種程序?qū)羟蚯蚴值膿羟蛎新驶蛘邔W生的考試分數(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<>遞歸方法重新實現(xiàn)BinarySearch并跟蹤該方法的調(diào)用。每當該方法被調(diào)用時,打印出它的參數(shù)lo和hi并按照遞歸的深度縮進。提示:為遞歸方法添加一個參數(shù)來保存遞歸的深度。為BinarySearch的測試用例添加一個參數(shù):+打印出標準輸入中不在白名單上的值;-,則打印出標準輸入中在白名單上的值。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;}給出使用歐幾里德算法計算105和24的最大公約數(shù)的過程中得到的一系列p和q的值。擴展該算法中的代碼得到一個程序Euclid,從命令行接受兩個參數(shù),計算它們的最大公約數(shù)并打印出每次調(diào)用遞歸方法時的兩個參數(shù)。使用你的程序計算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ù)學歸納法證明歐幾里德算法能夠計算任意一對非負整數(shù)p和q的最大公約數(shù)。提高題將三個數(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二項分布。估計用以下代碼計算binomial<100,50>將會產(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)計算過的值保存在數(shù)組中并給出一個更好的實現(xiàn)。估計遞歸調(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ù)組中的實現(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刪除重復元素。修改BinarySearch類中的測試用例來刪去排序之后白名單中的所有重復元素。publicstaticintcountC<int[]a>//排序后,統(tǒng)計重復數(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類添加一個靜態(tài)方法rank<>,它接受一個鍵和一個整型有序數(shù)組〔可能存在重復鍵作為參數(shù)并返回數(shù)組中小于該鍵的元素數(shù)量,以及一個類似的方法count<>來返回數(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的元素數(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ù)組練習。編寫一段程序,創(chuàng)建一個N×N的布爾數(shù)組a[][]。其中當i和j互質(zhì)時〔沒有相同因子,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>; } }隨機連接。編寫一段程序,從命令行接受一個整數(shù)N和double值p〔0到1之間作為參數(shù),在一個圓上畫出大小為0.05且間距相等的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];//畫圓/描點drawcricle<x,y,r,N,p,a>;//畫線 Randomline<x,y,a>; }}直方圖。假設(shè)標準輸入流中含有一系列double值。編寫一段程序,從命令行接受一個整數(shù)N和兩個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é)點double[]b=newdouble[N*N*N];//隨機產(chǎn)生一個數(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矩陣庫。編寫一個Matrix庫并實現(xiàn)以下API:publicclassMatrixstaticdoubledot<double[]x,double[]y>向量點乘staticdouble[][]mult<double[][]a,double[][]b>矩陣和矩陣之積staticdouble[][]transpose<double[][]a>轉(zhuǎn)置矩陣staticdouble[]mult<double[][]a,double[]x>矩陣和向量之積staticdouble[]mult<double[]y,double[][]a>向量和矩陣之積編寫一個測試用例,從標準輸入讀取矩陣并測試所有方法。publicclassMatrix{publicMatrix<>{//TODOAuto-generatedconstructorstub }publicstaticdoubledot<double[]x,double[]y>//向量點乘 {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; }/* *矩陣的乘積定義:一個n行m列的矩陣乘以一個m行p列的矩陣,得到的結(jié)果是一個n行p列的矩陣, *其中的第i行第j列位置上的數(shù)等于前一個矩陣第i行上的m個數(shù)與后一個矩陣第j列上的m個數(shù)對應 *相乘后所有m個乘積的和。 **/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; } //測試用例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>">; }}過濾。以下哪些任務需要〔在數(shù)組中,比如保存標準輸入中的所有值?哪些可以被實現(xiàn)為一個過濾器且僅使用固定數(shù)量的變量和固定大小的數(shù)組〔和N無關(guān)?在每個問題中,輸入都來自于標準輸入且含有N個0到1的實數(shù)。?打印出最大和最小的數(shù)?打印出所有數(shù)的中位數(shù)?打印出第k小的數(shù),k小于100?打印出所有數(shù)的平方和?打印出N個數(shù)的平均值?打印出大于平均值的數(shù)的百分比?將N個數(shù)按照升序打印?將N個數(shù)按照隨機順序打印實驗題1.1.35模擬擲骰子。以下代碼能夠計算每種兩個骰子之和的準確概率分布: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]的值就是兩個骰子之和為i的概率。用實驗模擬N次擲骰子,并在計算兩個1到6之間的隨機整數(shù)之和時記錄每個值的出現(xiàn)頻率以驗證它們的概率。N要多大才能夠保證你的經(jīng)驗數(shù)據(jù)和準確數(shù)據(jù)的吻合程度達到小數(shù)點后三

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論