本章节为习题1.1.1-1.1.25的答案
-
1.1.1
答案
a. 7
b. 200.0000002 (科学记数法,e后面的数字表示10的多少次方)
c. true
-
1.1.2
答案
a.1.618(注意不是1哦) 表达式类型为浮点型
b. 10.0 表达式类型为浮点型
c.true 表达式类型为布尔类型
d.33 表达式为String类型(3+“3”时int和String型的运算,结果会自动转换为String类型)
ps:基本数据类型转换遵循规则:
容量小的类型自动转换成容量大的数据类型,数据类型按照容量大小排序为:
byte,short,char<int<long<float<double
但String类型不能自动转换为int类型
-
1.1.3
答案
答案一:
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class TestUqual {
public static void main(String[] args) {
int a,b,c;
a=b=c=0;
StdOut.println("Please enter three numbers:");
a = StdIn.readInt();//作者自己写的库 从命令行输入
b = StdIn.readInt();
c = StdIn.readInt();
//调用函数进行判断并输出结果
if (equals(a,b,c)==1) StdOut.println("equal");
else StdOut.println("not equal");
}
//判断三个数是否相等
public static int equals(int a, int b, int c) {
// TODO Auto-generated method stub
if(a==b&&b==c) return 1;
else return 0;
}
}
########################################
答案二:
public class ex_1_1_3 {
public static void main(String[] args) {
int number1 = Integer.parseInt(args[0]);
int number2 = Integer.parseInt(args[1]);
int number3 = Integer.parseInt(args[2]);
if(number1 == number2){
if(number2 == number3)
System.out.println("equal");
}
else System.out.println("not equal");
}
}
-
1.1.4
答案
a. if (a > b) c = 0;
b. if (a > b) { c = 0; }
-
1.1.5
答案
public class TestUqual {
public static void main(String[] args)
{
double x; double y;
x=StdIn.readDouble();
y=StdIn.readDouble();
StdOut.print(compare(x)&& compare(y));
}
public static boolean compare(double x)
{
if(x>0&&x<1) returen ture;
else return false;
}
}
-
1.1.6
答案
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
-
1.1.7
答案
a.3.00009 b.499500 c. 10000
-
1.1.8
答案
a. b b. bc c. e
-
1.1.9
答案
原答案:
import java.util.Scanner;
import edu.princeton.cs.algs4.Stack;
import edu.princeton.cs.algs4.StdOut;
public class exerce1 {
public static void main(String[] args) {
Stack<Integer> sta = new Stack<Integer>();//注意不能为int
Scanner s = new Scanner(System.in);
String st = "";//转换为String类型的值
int N = s.nextInt();
while(N != 0){
int m = N%2;
sta.push(m);
N = N/2;
}
while(!sta.isEmpty())
StdOut.print(st+sta.pop());
}
第二次修改的答案(另一种方法)
public static String decimalToBinary(int n) {
String resultString = "";
for (int i = 31; i >= 0; i--)
resultString = resultString + (n >>> i & 1);//(与运算符:两个操作数中位都为1,结果才为1,否则结果为0)
return resultString;
}
解析:“>>>”运算符所作的是无符号的位移处理,它不会将所处理的值的最高位视为正负符号,所以作位移处理时,会直接在空出的高位填入0。
当我们要作位移的原始值并非代表数值时(例如:表示颜色图素的值,最高位并非正负号),可能就会需要使用此种无符号的位移。
无符号右移的意思,忽略符号位,空位都以0补齐
value >>> num -- num 指定要移位值value 移动的位数
移位运算符大于&运算符
如数字为-17 二进制为:11111111 11111111 11111111 11101111 -17>>>2为(无符号右移2位)后为 00111111 11111111 11111111 11111011
-
1.1.10
答案
它没有用new为a[ ]分配内存
这段代码会产生一个variable a might not have been initialized的编译错误。
-
1.1.11
答案
import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.StdRandom;
public class ex1_1_11 {
public static void main(String[] args) {
boolean a[][] = new boolean[10][10];
a = RandomInitial(a);//随机初始化
TestPrint(a);//打印数组
}
private static void TestPrint(boolean[][] a) {
// TODO Auto-generated method stub
for(int i = 0;i<a.length;i++){
StdOut.print(" "+i);//打印行号
}
StdOut.print(" ");
for(int i = 0;i<10;i++){
StdOut.print(i);//打印列号
for(int j = 0;j<10;j++){
if(a[i][j]) StdOut.print("*"+" ");
else StdOut.print(" "+" ");
}
StdOut.println(" ");
}
}
//随机产生布尔数组
private static boolean[][] RandomInitial(boolean[][] a) {
// TODO Auto-generated method stub
for(int i = 0;i<a.length;i++){
for(int j = 0;j<a.length;j++){
if(StdRandom.bernoulli(0.1)) a[i][j] = true;
else a[i][j] = false;
}
}
return a;
}
}
-
1.1.12
答案
0 1 2 3 4 5 6 7 8 9
-
1.1.13
答案
import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.StdRandom;
public class ex1_1_13 {
public static void main(String[] args) {
final int M = 4;
final int N = 4;
int a[][] = new int [M][N];
int b[][] = new int [N][M];//不能用同一个数组
a = RandomInitial(a,N);//初始化二维数组
b = MigrateArrays(a,b);//转置二维数组
MigratePrint(b);//输出转置后的二维数组
}
private static void MigratePrint(int[][] b) {
// TODO Auto-generated method stub
StdOut.print("转置后的二维数组为:");
StdOut.println();
for(int i = 0; i<b.length;i++){
for(int j = 0;j<b[0].length;j++){
StdOut.print(b[i][j]+" ");
}
StdOut.println();
}
}
private static int[][] MigrateArrays(int[][] a, int[][] b) {
// TODO Auto-generated method stub
for(int i = 0; i<a.length;i++){
for(int j = 0;j<a[0].length;j++){
b[j][i] = a[i][j];
}
}
return b;
}
private static int[][] RandomInitial(int[][] a, int n) {
// TODO Auto-generated method stub
StdOut.println("初始化二维数组:");
for(int i = 0; i<a.length;i++){
for(int j = 0;j<a[0].length;j++){
a[i][j] = StdRandom.uniform(n);
StdOut.print(a[i][j]+" ");
}
StdOut.println();
}
return a;
}
}
-
1.1.14
答案
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class ex1_1_14 {
public static int lg(int N){
int j = 0;
while(N!=1){
N = N/2;
j++;
}
return j;
}
public static void main(String[] args) {
int m = StdIn.readInt();
StdOut.print(lg(m));
}
}
-
1.1.15
答案
public static int[] histogram(int a[],int M){
int b[] = new int[M];
int n = 0;
int m = 0;
for(int i = 0;i<M;i++){
for(int j =0;j<a.length;j++){
if(i == a[j]) n++;
b[i] = n;
}
n = 0;
}
for(int i = 0;i<M;i++){
m = m+b[i];
}
return b;
}
-
1.1.16
答案
311361142246
(不懂诶,程序输出的是上面的这个值,而我算的是32)
-
1.1.17
答案
这段代码中的基础情况永远不会被访问。
调用exR2(3) 会产生调用exR2(0)、exR2(-3) 和exR2(-6),
循环往复直到发生StackOverflowError。
-
1.1.18
答案
50 33 a*b
2^25 3^11
-
1.1.19
答案
public class Fibonacci {
// Fibonacci数列计算,时间空间复杂度优化版
private static int M = 100;
private static long[] fib = new long[M];
public static long fibonacciOptimization(int N) {
if(0 == N)
fib[0] = 0;
else if(1 == N)
fib[1] = 1;
else
fib[N] = fib[N - 1] + fib[N -2];
return fib[N];
}
public static void main(String[] args) {
for(int N = 0; N < 100; ++N) {
fib[N] = fibonacciOptimization(N);
StdOut.println(N + "\t" + fib[N]);
}
}
}
-
1.1.20
答案
前提知识:
111.png
512的以2为底的对数是:
double log = Math.log(512, 2);
public class ex1_1_20 {
public static double factorialln(double N){
double a;
if (N>1)
return Math.log(N)+factorialln(N-1);
else
return 0;
}
public static void main(String[] args) {
System.out.println(factorialln(35));
}
}
-
1.1.21
答案
java 中存储不同类型数据可以用类~
还没想好~
网友评论