算法 练习1.1
来源:互联网 发布:js map参数传递 编辑:程序博客网 时间:2024/06/05 18:33
1.1.1
a.7;
b.200.0000002;
c.true.
1.1.2
a.double,1.618;
b.double,10.0;
c.boolean,true;
d.string,33.
1.1.3
public class Exercise1_1_3{ public static void main(String[] args){ double a = Doubleparse.Double(args[0]); double b = Doubleparse.Double(args[1]); double c = Doubleparse.Double(args[2]); if(a == b&&b == c) System.out.println("equal"); else System.out.println("not equal"); }}
1.1.4
a.if不能与then搭配;
b.应该用括号将a>b括起来;
c.没有问题;
d.c=0后面少个”;”.
1.1.5
public class Exercise1_1_5{ public static void main(String[] args) { double a = Doubleparse.Double(args[0]); double b = Doubleparse.Double(args[1]); if(a > 0&&a < 1&&b > 0&&b < 1) System.out.println("true"); else System.out.println("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.98;
b.197;
c.e.
1.1.9
String s = "";for(int n = N;n > 0;n /= 2) s = (n % 2) + s;
1.1.10
它没有用new为a[]分配内存。
1.1.11
import edu.princeton.cs.algs4.StdOut;//我是在eclipse中运行的import edu.princeton.cs.algs4.StdRandom;public class Exercise1_1_11{ public static void main(String[] args){ boolean[][] a = new boolean[10][10]; a = RandomInitial(a);//随机初始化数组 Print(a);//打印数组 } public static void Print(boolean[][] a){ 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(); } } public static boolean[][] RandomInitial(boolean[][] a){ 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 Exercise1_1_13{ public static void main(String[] args){ int m = 5; int n = 5; int[][] a = new int[m][n]; int[][] b = new int[n][m]; a = RandomInitial(a,n);//初始化二维数组 b = MigrateArrays(a,b);//转置二维数组 MigratePrint(b);//打印转置的二维数组 } public static void MigratePrint(int[][] b){ 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(); } } public static int[][] MigrateArrays(int[][] a,int[][] b){ for(int i = 0;i < a.length;i++){ for(int j = 0;j < a[0].length;j++){ b[i][j] = a[j][i]; //StdOut.print(a[i][j]); } //StdOut.println(); } return b; } public static int[][] RandomInitial(int[][] a,int N){ 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*
(感觉这题好经典)
public static int lga(int N,int M){ int a = 0; while(N >= M){ N = N / M; a++; } return a;}
1.1.15
public static int[] histogram(int[] a,int M){ int m = 0; int n = 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
1.1.17
(书上有答案)
这段代码中的基础情况永远不会被访问。调用exR2(3)会产生调用exR2(0)、exR2(-3)和exR2(-6),循环往复直到发生StackOverflowError。
1.1.18
50,33,a*b;
65795,6574.(即为2^25,3^11).
1.1.19
(第一问自己试一下,毕竟要等一个小时,下面直接看第二问)
public class Fibonacci{ public static long F(int N){ if(N == 0) return 0; if(N == 1) return 1; return F(N -1) + F(N -2); } public static void main(String[] args){ int[] a = new [100]; a = A(a); } public static long[] A(int[] a){ a[0] = 0; a[1] = 1; for(int N = 2;N < 100;N++){ a[N] = a[N -1] + a[N - 2]; StdOut.println(N + " " +a[N]); } }}
1.1.20
public static double factorialln(long N){ if(N > 1) return Math.ln(N) + factorialln(N - 1); else return 0;}
1.1.21
import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class Exercise1_1_21 { public static void main(String[] args) { int M = 3; int index = 0; String[] strs = new String[M]; while(index < M) strs[index++] = StdIn.readLine(); for(int i = 0; i < strs.length; ++i) { String[] arr = strs[i].split("\\s+"); double temp = Double.parseDouble(arr[1]) / Double.parseDouble(arr[2]); StdOut.printf("%-10s %-10s %-10s %-13.3f\n", arr[0], arr[1], arr[2], temp); }; }}
1.1.22
import java.util.Arrays;import edu.princeton.cs.algs4.StdOut;import edu.princeton.cs.algs4.StdRandom;public class Exercise1_1_22{ public static void main(String[] args){ int N = 1024; int[] arr = new int[N]; for(int i = 0;i < arr.length;i++) arr[i] = StdRandom.uniform(N * 50); Arrays.sort(arr); StdOut.print("seq = "); for(int i = 0;i < arr.length;i++) StdOut.print(arr[i] + "\t"); int key = arr[StdRandom.uniform(N)]; StdOut.println("\nkey = " + key); StdOut.println("------------------------------------------------------------------"); binarySearch(key,arr,0); } public static int binarySearch(int key,int[] arr,int depth){ return rank(key,arr,0,arr.length - 1,depth); } public static int rank(int key,int[] arr,int low,int high,int depth){ printCallInfo(low,high,depth); if(low > high) return -1; int mid = low + (high - low) / 2; if(key < arr[mid]) return rank(key,arr,low,mid -1,depth + 1); else if(key > arr[mid]) return rank(key,arr,mid + 1,high,depth + 1); else return mid; } private static void printCallInfo(int low,int high,int depth){ StdOut.print(depth + "\t"); printIndent(depth); StdOut.println(low + "\t" + high); } private static void printIndent(final int indents){ for(int i = 0;i < indents;i++) StdOut.print("-----------"); }}
1.1.23
import java.util.Arrays;import edu.princeton.cs.algs4.In;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class Exercise1_1_23{public static boolean BinaryLookup(int key,int[] arr){ int low = 0; int high = arr.length - 1; while(low <= high){ int mid = low + (high - low) / 2; if(key < arr[mid]) high = mid - 1; else if(key > arr[mid]) low = mid + 1; else return true; } return false;}public static void main(String[] args){ char symbol = '-'; int[] whitelist = new In(args[0]).readAllInts(); Arrays.sort(whitelist); while(!StdIn.isEmpty()){ int key = StdIn.readInt(); boolean found = BinaryLookup(key,whitelist); if('+' == symbol&&!found) StdOut.println(key); if('-' == symbol&&found) StdOut.println(key); }}}
测试命令:java xxx tinyW.txt < tinyT.txt
1.1.24
import edu.princeton.cs.algs4.StdOut;public class Exercise1_1_24 { public static void main(String[] args){ int p = Integer.parseInt(args[0]); int q = Integer.parseInt(args[1]); int gcd = Euclid(p,q); StdOut.println(" **********" + gcd); } public static int Euclid(int p,int q){ if(q == 0) return p; StdOut.println(q + " " + p % q); return Euclid(q,p % q); }}
1.1.25
定理:gcd(a,b) = gcd(b,a mod b)
证明:a可以表示成a = kb + r,则r = a mod b
假设d是a,b的一个公约数,则有
d|a, d|b,而r = a - kb,因此d|r
因此d是(b,a mod b)的公约数
假设d 是(b,a mod b)的公约数,则
d | b , d |r ,但是a = kb +r
因此d也是(a,b)的公约数
因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证
(题目要求的用数学归纳法来证明的原理和该定理证明的原理一样,稍加修改即可。)
- 算法 练习1.1
- 【练习】经典算法练习
- 算法练习
- 算法练习
- 算法练习
- 算法练习
- 【算法练习】
- 算法练习
- 算法练习
- 算法练习
- 算法练习
- 算法练习
- 算法练习
- 算法练习
- 算法练习
- 算法练习
- 算法练习
- 算法练习
- STM32 无线下载程序(非IAP)
- iOS开发问题之the file “XXX” could not be opened because you don't have permission to view it
- Linux下编程-----文件与IO(一)基本API
- NOIP2014解方程
- 轻松python之文件专题-关于目录树的一些操作
- 算法 练习1.1
- 【手势识别-论文学习】 Hands Deep in Deep Learning for Hand Pose Estimation
- 逆波兰:将中缀表达式转为后缀表达式
- 给定M*N矩阵,编写代码找出某元素
- 【树链剖分】 HDU 4729 An Easy Problem for Elfness 二分
- 使用对象去暂停或锁住一个线程的方式
- 魅族MX5“应用未安装”的解决办法
- CodeForces 573D Bear and Cavalry(线段树优化dp)
- Python os-操作系统接口