算法第四版习题答案docx.docx
- 文档编号:30436657
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:42
- 大小:35.66KB
算法第四版习题答案docx.docx
《算法第四版习题答案docx.docx》由会员分享,可在线阅读,更多相关《算法第四版习题答案docx.docx(42页珍藏版)》请在冰豆网上搜索。
算法第四版习题答案docx
1.1.1给出以下表达式的值:
a.(0+15)/2
b.2.Oe-6*100000000.1
c.true&&false||true&&true
答案:
a.7,b.200.0000002c.ture
1.1.2给出以下表达式的类型和值:
a.(1+2.236)/2
b.1+2+3+4.0
c.4.1>=4
d.1+2+〃3〃
答案:
a.1.618b.10.0c.trued.33
1.1.3编写一个程序,从命令行得到三个整数参数。
如果它们都相等则打印equal,否则
打印notequalo
publicclassTestUqual
{
publicstaticvoidmain(String[]args)
{
inta,b,c;
a=b=c=0;
StdOut・print(.n("Pleaseenterthreenumbers");
a=StdIn・readlnt();
b=StdIn•readInt();
c=Stdln・readInt();
if(equals(a,b,c)==l)
{
StdOut.print(HequalH);
}
else
{
StdOut.print(11notequal11);
}
}
publicstaticintequals(inta,irrtb,intc)
{
if(a==b&&b==c)
{
return1;
}
else
{
return0;
}
}
}
1.1.4下列语句各有什么问题(如果有的话)?
乩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;)
1.1.5编写一段程序,如果double类型的变量x和y都严格位于0和1之间则打印
true,否则打印fa1se。
publicclassTestUqual
{
publicstaticvoidmain(String[]args)
{
doublex;
doubley;
x=StdTn.readDouble();
y二Stdin.readDouble();
StdOut.print(compare(x)&&compare(y));
}
publicstaticbooleancompare(doublex)
{
lf(x>0&&xv1)
returenture;
else
returnfalse;
}
}
1.1.6下面这段程序会打印出什么?
intf二0;
intg=1;
for(inti=0;i<=15;i++)
{
StdOut.printin(f);
f二f+g;
g二f-g;
}
答案:
01123581321345589144233377610
1.1.7分别给出以下代码段打印出的值:
a.doub1et二9.0;
while(Math,abs(t-9.0/1)>.001)
t二(9.0/t+t)/2.0;
StdOut.printf("%.5f\n",t);
b.intsum=0;
for(inti=1;i<1000;i++)
for(intj=0;j
sum++;
StdOut.printIn(sum);
c.intsum=0;
for(inti=1;i<1000;i*=2)
for(intj=0;j<1000;j++)
sum++;
StdOut.printIn(sum);
答案:
a.3.00009b.499500c.10000
1.1.8下列语句会打印出什么结果?
给出解释。
a.System.out.printin('b');
b.System.out.println('b'+'c');
c.System.out.printin((char)('a'+4));
答案:
a.bb.197c.e
1.1.9编写一段代码,将一个正整数W用二进制表示并转换为一个String类型的值s。
解答:
Java有一个内置方法Integer.toBinaryString(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[]分配内存。
这段代码会产生一个variableamightnothavebeeninitialized的编译错误。
1.1.11编写一-段代码,打印出一个二维布尔数组的内容。
其屮,使用*表示真,空格表
示假。
打印出行号和列号。
publicclassTest{
publicTest(){
//TODOAuto-generatedconstructorstub
}
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
boolean[][]a=newboolean[10][10];
a^RandomlnitiaL^a);//随机初始化TestPrintsa);〃打E卩数组
publicstaticvoidTestPrint(boolean[][]a)
for(inti=0;i StdOut.print(Mn+i); StdOut.print/.n(H"); for(inti=0;i<10;i++) { StdOut.print(i); for(intj=0;j<10;j++) { StdOut.H); else StdOut.printC*,,+,1H); } StdOut.printingu); } } publicstaticboolean[][]Randomlnitial(boolean[][]a){ for(inti=0;ilength;i++) { for(intj=0;jlength;j++) { if(StdRandom.bernouLLi(Q.l)) a[i][j]=true; else a[i][j]=false; } } returna; } } 1.1.12以下代码段会打印出什么结果? 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++) Syst em.out.print ln(i ); 答案 : 0123456 78 9 女USystem・out.printin(a[i]); 0123443210 1.1.13编写一段代码,打印岀一个必行用列的二维数组的转置(交换行和列)。 publicclassMigrate{ publicMigrate(){ //TODOAuto-generatedconstructorstub publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub intm=5; intn=5; int[][]a=newint int[][]b=newinta=RandomInitiaL(a,n);〃初始化二维数组b=MigrateArrays(ab);//车专置二维数组Mig厂crtePrint(b);//输占转置二维数组 } publicstaticvoidMigrateP”int(int[][]a) { StMut.printLn输出转置二维数组: ”); for(inti=0;ilength;i++) { for(intj=0;jlength;j++) { StdOut.print(a[i][j]+nn); } StdOut.printtn(); } } publicstaticint[][]MigrateArrays(int[][]a,int[][]b){ for(inti=0;i {for(intj=0;j {b[j][i]=a[i][j]; } } returnb; } publicstaticint[][]Randominitial(int[][]a^intN) { StdOut.printLn(u初始化二维数组: ”); for(inti=0;ilength;i++) { for(irrtj=0;jlength;j++) { a[i][j]=StdRandom>uni/or/n(N); StdOut.prwt(a[i][j]+HH); } StdOut.printtn(); } returna; } } 1.1.14编写一个静态方法lgO,接受一个整型参数N,返回不大于Iog2/V的最大整数。 不 要使用Math库。 publicstaticintlga(intN? intM) inta=0; while(N>=M) N二N/M;a++; returna; } 1.1.15编写一,个静态方法histogramO,接受一个整型数组a[]和一个整数M为参数并返回一个大小为M的数组,英屮笫i个元素的值为整数i在参数数组屮出现的次数。 如果a[]屮的值均在0到之I'可,返回数组屮所有元素之和应该和a.length相等。 publicstaticint[]histogram(int[]a^intM) { int[]b=newint[M]; intn=0; intm=0; for(inti=0;i { for(intj=0;j { if(i==a[j]) { n++; } b[i]=n; } n=0; } for(inti=0;i { m=m+b[i]; } returnb; } 1.1.16给出exRl(6)的返回值: pub1icstaticStringexRl(intn) { if(n<=0)return returnexRl(n一3)+n+exRl(n一2)+n; } 答案: 311361142246 1.1.17找出以下递归函数的问题: publicstaticStringexR2(intn) { Strings=exR2(n-3)+n+exR2(n-2)+n; if(n<=0)return"“; returns; } 答: 这段代码屮的基础情况永远不会被访问。 调用exR2(3)会产生调用exR2(0)、exR2(-3)和exR2(-6),循环往复直到发生StackOverflowErroro可以修改为: pub1icstaticStringexR2(intn)if(n〈二0)return"“; Strings=exR2(n-3)+n+exR2(n-2)+n; returns; } 1.1.18请看以下递归函数: pub1icstaticintmystery(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)的返冋值是多少? 给定正整数a和b,mystery(a,b)计算的结果是什么? 将代码中的+替换为*并将return0改为return1,然后回答相同的问题。 答案: 50,33.2253'1 1.1.19在计算机上运行以下程序: publicclassFibonacci { publiestaticlongF(intN) { if(N==0)return0; if(N==1)return1; returnF(NT)+F(N~2); } publicstaticvoidmain(StringEJargs) { for(intN=0;N<100;N++) StdOut.printin(N+""+F(N)); } } 计算机用这段程序在一个小时之内能够得到F(N)结果的最大N值是多少? 开发F(N)的一个更好的实现,用数组保存已经计算过的值。 publicclassFibonacci { publicstaticlongF(intN) { if(N==0)return0; if(N==1)return1; returnF(N-l)+F(N・2); } publicstaticvoidmain(String[]args)int[]a=newint[100]; a=A(a); } publicstaticlong[]A(int[]a) { a[0]=0; for(intN=2;N<100;N++) {a[N]=a[N-l]+a[N-2]; StdOut.println(N+””+a[N]); } } 1.1.20编写一个递归的静态方法计算InGV! )的值。 publicstaticdoublefactorialln(longN) { if(N>l) returnMath.ln(N)+factorialln(N-l); else return0; } 1.1.21编写一•段程序,从标准输入按行读取数据,其屮每行都包含一个名字和两个整 数。 然后用printfO打印一张表格,每行的若干列数据包括名字、两个整数和笫一个整数除以笫二个整数的结果,精确到小数点后三位。 可以用这种程序将棒球球手的击球命中率或者学生的考试分数制成表格。 publicclassScoreTable{ publicstaticvoidmain(String[]args){ Strings="Let'sgoforlunch! Inin=newIn("Se"); String[]whitelist=in・readAnstrings();//将文件中的字符串读取到数组中for(inti=0;i StdOut・pMM(whitelist[i]+“n+whitelist[i+l]+"H+whitelist[i+2]+,* ”); doublem=Double.parse£)ot/bLe(whitelist[i+1]); doublen=Double・/967厂30£)017/9(0(闪111.1: 仑1匚51: [i+2]); StdOut.printf("0.3%n,m/n); StdOut.printLn(u”); } } } 1.1.22使用1.1.6.4节屮的rank()递归方法重新实现BinarySearch并跟踪该方法的调用。 每当该方法被调用时,打印出它的参数1。 和hi并按照递归的深度缩进。 提示: 为递归方法添加一个参数来保存递归的深度。 1.1.23为BinarySearch的测试用例添加一个参数: +打印出标准输入屮不在白名单上 的值;-,则打印出标准输入屮在白名单上的值。 publicstatixintrank(intkey,int[]a? charc){ intlo=0; while(lo<=hi)//Keyisinintmid=loif(key elseif(keyelse inthi=a.length・1;if(c==,+,) a[lo.ehilornotpresent. +(hi・lo)/2; >a[mid])lo=mid+1; returnmid; } return-1; } if(d') { { a[lo>ehi]ornotpresent・+(hi・lo)/2;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 第四 习题 答案 docx