《算法第四版》课后练习个人答案(第一章)更新至1.1.34

本文提供了《算法第四版》第一章的课后习题答案,包括逻辑运算、类型转换、递归问题、算法分析等内容,并讨论了一些编程细节和优化策略。

注意:所有程序默认使用《算法第四版》中附带的algs4.jar包中的函数,下载链接https://algs4.cs.princeton.edu/code/

1.1.1
a. 7
b. 200.0000002
c. true(Java逻辑表达式运算顺序从左向右)
1.1.2
通过“变量名.getClass().getName()”或者“变量名.getClass().toString()”获得类型
a. 1.618, double
b. 10.0, double
c. true, boolean
d. 33, String
1.1.3

import edu.princeton.cs.algs4.StdOut;

public class test {
	public static void main(String[] args) {
		String str0 = args[0];
		String str1 = args[1];
		String str2 = args[2];
		if(str0.equals(str1) && str1.equals(str2)) {
			StdOut.println("equal");
		}else {
			StdOut.println("not equal");
		}
	}
}

1.1.4
a. 没有if…then语句
b. if条件需要()
c. 没有问题
d. c = 0后面需要分号
1.1.5

import edu.princeton.cs.algs4.StdOut;

public class test {
	public static void main(String[] args) {
		double a = 0.5, b = 1.5;
		if ( a > 0 && a < 1 && b > 0 && b < 1) {
			StdOut.println("true");
		}else {
			StdOut.println("false");
		}
		
	}
}

1.1.6 [011 0-1-1 011 0-1-1…]
1.1.7
a. 3.00009
b. 499550
c. 10000
1.1.8
a. 结果:b。原因:直接输出char类型字符
b. 结果:197。原因:char+char=两者的ASCII值相加
c. 结果:e。原因:通过强制类型转换将ASCII值转换为了char类型
1.1.9

import edu.princeton.cs.algs4.StdOut;

public class test {
	public static void main(String[] args) {
		String s = "";
		int num = 8;
		while(num != 1 && num !=0){
			int add = num % 2;
			s = add + s;
			num = num / 2;
		}
		s = num + s;
		StdOut.println(s);
	}
}

1.1.10 没有为数组申请内存
1.1.11

import edu.princeton.cs.algs4.StdOut;
import java.util.Random;

public class test {
	public static void main(String[] args) {
		boolean[][] a = new boolean[9][9];
		Random r = new Random();
		for (int i = 0; i < 9 ; i++ ) {
			for (int j = 0; j < 9 ; j++ ) {
				a[i][j] = r.nextBoolean();
			}
		}
		StdOut.print("   1 2 3 4 5 6 7 8 9 ");
		for (int i = 0; i < 9 ; i++ ) {
			StdOut.print("\r\n" + (i+1) + "  ");
			for (int j = 0; j < 9 ; j++ ) {
				if(a[i][j] == true) {
					StdOut.print("* ");
				}else {
					StdOut.print("  ");
				}
			}
		}
		
	}
}

1.1.12 结果:0123443210
1.1.13

import edu.princeton.cs.algs4.StdOut;
import java.util.Random;

public class test {
	public static void main(String[] args) {
		int[][] a = new int[10][10];
		Random r = new Random();

		// init matrix and print
		for (int i = 0; i < 10 ; i++ ) {
			for (int j = 0; j < 10 ; j++ ) {
				a[i][j] = r.nextInt(10);
				StdOut.print(a[i][j] + " ");
			}
			StdOut.println();
		}

		// transposition
		StdOut.println("Transposing...");
		for (int i = 0; i < 10 ; i++ ) {
			for (int j = 0; j < i; j++) {
				int temp = a[i][j];
				a[i][j] = a[j][i];
				a[j][i] = temp;
			}
		}

		// print new matrix
		for (int i = 0; i < 10 ; i++ ) {
			for (int j = 0; j < 10 ; j++ ) {
				StdOut.print(a[i][j] + " ");
			}
			StdOut.println();
		}
	}
}

1.1.14

import edu.princeton.cs.algs4.StdOut;

public class test {
	public static void main(String[] args) {
		StdOut.println(lg(1024));
	}

	public static int lg(int N) {
		int x = 1;
		int num = 2;
		if(N == 1) {
			return 0;
		}else {
			while(num*2 <= N) {
				num *= 2;
				x++;
			}
			return x;
		}
	}
}

1.1.15

import edu.princeton.cs.algs4.StdOut;
import java.util.Random;

public class test {
	public static void main(String[] args) {
		i
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值