《算法》1.1-习题解答

1.答疑

  1. Java字节码:
    运行于java虚拟机上。将程序抽象为字节码可以保证Java 程序员的代码能够运行在各种设备之上。
  2. Math.abs(-2147483648)?:
    -2147483648. This strange (but true) result is a typical example of the effects of integer overflow.结果溢出。
  3. java内置无穷大数:Double.POSITIVE_INFINITY/Double.NEGATIVE_INFINITY.
  4. String不能用大于和小于比较。
  5. 负数的除法和余数:
    表达式a/b 的商会向0 取整;a % b 的余数的定义是(a/b)*b + a % b 恒等于a。 例如-14/3 和14/-3 的商都是-4,但-14 % 3 是-2,而14 % -3 是2。余数的符号和被除数相同。
  6. 为什么数组的起始索引是0 而不是1 ?
    这个习惯来源于机器语言,那时要计算一个数组元素的地址需要将数组的起始地址加上该元素的索引。将起始索引设为1 要么会浪费数组的第一个元素的空间,要么会花费额外的时间来将索引减1。
  7. 在Java 中,一个静态方法能够将另一个静态方法作为参数吗?
    不行,但问得好,因为有很多语言都能够这么做。

2.习题解答

1.1.7 输出3.0009

package chapter1;
public class prac1_1_7a {
    public static void main(String[] args){
        double t=9.0;
        while(Math.abs(t-9.0/t)>0.001){
            t=(9.0/t+t)/2;
        }
        System.out.printf("%.5f\n",t);
    }
}

1.1.8 输出b 197 e 33

package chapter1;
public class prac_1_1_8 {

    public static void main(String[] args){
        System.out.println('b');
        System.out.println('b'+'c');
        System.out.println((char)('a'+4));
        System.out.println(1+2+"3");
    }
}

1.1.9 二进制转换

package chapter1;
import edu.princeton.cs.algs4.StdIn;
public class prac1_1_9 {
    public static void main(String[] args){
        int N;
        while((N=StdIn.readInt())>=0){
            String s="";
            for(int n=N;n>0;n/=2){
                s=(n%2)+s;
            }
            System.out.println(s);
        }
    }
}

1.1.11

package chapter1;
public class prac1_1_11 {
    public static void main(String[] args) {
        boolean[][] b = { { true, true, true, true }, { false, false, false, false }, { true, false, true, false } };
        int row = b.length;
        int col = b[0].length;
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (b[i][j] == true)
                    System.out.printf("*");
                else
                    System.out.printf(" ");
            }
            System.out.println();
        }
    }
}

1.1.13

package chapter1;
public class prac1_1_13 {
    public static void main(String[] args){
        int[][] a={{1,2,3},{4,5,6}};
        int row=a.length;
        int col=a[0].length;
        for(int i=0;i<col;i++){
            for(int j=0;j<row;j++){
                System.out.printf("%4d",a[j][i]);
            }
            System.out.println();
        }
    }
}

1.1.14

package chapter1;
import edu.princeton.cs.algs4.StdIn;
public class prac1_1_14 {
    public static int lg(int n){
        int res=1;
        int times=0;
        if(n==1) return 0;
        else if(n>0){
            while(res*2<=n){
                res*=2;
                times++;
            }
        }
        return times;
    }
    public static void main(String[] args) {
        int N;
        while (!StdIn.isEmpty()) {
            N = StdIn.readInt();
            System.out.println(lg(N));
        }
    }
}

1.1.15

package chapter1;
public class prac1_1_15 {
    public static void main(String[] args) {
        int[] testArray={1,1,2,3,1,7,5,3,2,2,2};
        System.out.println("histogram result");
        printArray(histogram(testArray, 8));
    }
    public static int[] histogram(int[] a,int M){
        int[] hArray=new int[M];
        for(int i=0;i<M;++i){
            int count=0;
            for(int j=0;j<a.length;++j){
                if(i==a[j]){
                    count++;
                }
            }
            hArray[i]=count;
        }
        return hArray;
    }    
    public static void printArray(int[] a){
        for(int i=0;i<a.length;++i){
            System.out.println("a["+i+"]: "+a[i]);
        }
    }
}

1.1.17 报错:不断循环,直到栈溢出,最基本的情况应该作为第一条语句return。

public static String exR2(int n)
{
String s = exR2(n-3) + n + exR2(n-2) + n;
if (n <= 0) return "";
return s;
}

1.1.19

package chapter1;
public class prac1_1_19 {
    public prac1_1_19() {
        int[] F = new int[100];
        F[0] = 0;
        F[1] = 1;
        for(int i=2;i<100;++i)
            F[i]=F[i-1]+F[i-2];
        System.out.println(F[30]);
    }
    public static void main(String[] args) {
        prac1_1_19 test=new prac1_1_19();
    }
}

1.1.20

package chapter1;
import java.lang.Math;
import edu.princeton.cs.algs4.*;
public class prac1_1_20 {
    public static void main(String[] args) {
        int N=StdIn.readInt();
        System.out.println(ln(N));
    }
    public static double ln(int N){
        if(N==1)
            return 0;
        return ln(N-1)+Math.log(N);
    }
}

1.1.21

package chapter1;
import edu.princeton.cs.algs4.StdIn;
public class prac1_1_21 {
    public static void main(String[] args){
        while(StdIn.hasNextLine()){
            String name=StdIn.readString();
            int m=StdIn.readInt();
            int n=StdIn.readInt();
            System.out.printf("%10s|%10d|%10d|%10.3f\n",name,m,n,(m*1.0)/n);
        }
    }
}

1.1.22

public static int rank_recursion(int key,int a[],int lo,int hi, int path){
        System.out.printf("%5d%5d%5d\n",lo,hi,path);
        int mid=lo+(hi-lo)/2;
        if(lo>hi) return -1;
        else if(key>a[mid])  return rank_recursion(key,a,mid+1,hi,++path);
        else if(key<a[mid])  return rank_recursion(key,a,lo,mid-1,++path);
        else return mid;
    }

1.2.24

package chapter1;
public class prac1_1_24 {
    public static int Euclid(int p,int q){
        System.out.printf("p=%10d,q=%10d\n",p,q);
        if(q==0) return p;
        else  return Euclid(q,p%q);
    }
    public static void main(String[] args){
        int p=Integer.parseInt(args[0]);
        int q=Integer.parseInt(args[1]);
        int res=Euclid(p,q);
        System.out.printf("p=%10d,q=%10d,gcd=%10d",p,q,res);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容

  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:选D,7+9=16;9+(-1)=8;(...
    Alex_bingo阅读 18,858评论 1 19
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,738评论 0 33
  • 从壁画中走来 从历史的烟云里走来 裹着传奇的霓虹 款款的 反弹琵琶 优雅的站成了 一道风景 站成了永恒的华章 古雅...
    东方地秀阅读 430评论 24 21
  • 这是学习交互设计时自己画的脑图,脑图内容较多,请自行放大。顺说一下,百度脑图真的太好用了
    黄chen甜阅读 594评论 0 0
  • 你相信天意吗? 很多人相信。 很多人不信。 很多人抱怨造化弄人。 很多人感谢爱有天意! 有这样一部充满了天意、巧合...
    达耳闻阅读 2,601评论 1 4