傻逼学习之——算法 第四版 1.1

初学算法,不会Java,各种捉急,用的算法第四版,跟着百度文库瞎掰。。。。。。。。一题一题的埋坑,,,,下面给出可以测试多题的代码(要有Sedgewick老先生的一手安排,去网站下载库和相应的文件:http://algs4.cs.princeton.edu/code/     )public class test { public static int lg(int N){ int
摘要由CSDN通过智能技术生成

初学算法,不会Java,各种捉急,用的算法第四版,跟着百度文库瞎掰。。。。。。。。一题一题的埋坑,,,,

下面给出可以测试多题的代码(要有Sedgewick老先生的一手安排,去网站下载库和相应的文件:http://algs4.cs.princeton.edu/code/     )

public class test {
	public static int lg(int N){
		int count = 0;
		for(int i = 2; i <= N; i *= 2)
			count++;
		return count;
	}
	
	public static int[] histogram(int[] a, int M){
		int[] b = new int[M];
		int N = a.length;
		for(int j = 0; j < N; j++)
			for(int i = 0; i < M; i++){
				if(i == a[j])
				{
					b[i]++;
				}
			}
		return b;
	}
	
	public static String exR1(int n){
		if(n <= 0)	return "";
		return exR1(n-3) + n + exR1(n-2);
	}
	
	public static int mystery(int a, int b){//神秘的函数,其实就是add(a,b)函数,
		if(b == 0)	return 0;				//至于题意中说的将代码中+换成*,return 0换成return 1,并没看出来啥效果
		if(b % 2 == 0)	return mystery(a+a, b/2);
		return mystery(a+a, b/2) + a;
	}
	
	public static void fibonacci(long[] a){
		int N = a.length;
		a[0] = 0;
		a[1] = 1;
		for(int i = 2; i < N; i++)
			a[i] = a[i-1] + a[i-2];
		return;
	}
	
	public static double lnn(int n){
		if(n == 0) return 0;
		return lnn(n-1) + Math.log(n);
	}
	
	//其中迭代中,利用的是r(余数)为零时,取b(除数)为结果,递归中用的是q(除数)为零时,p(被除数)为结果,,,其实大同小异,可以相互转换
	public static int gcd(int p, int q){//应该是默认p > q
		StdOut.printf("p=%d q=%d  ", p, q);//这一句代码是留题目1.1.24用的,他会影响1.1.30,所以没让其输出
		if(q == 0)	return p;
		int r = p % q;
		return gcd(q, r);
	}
	
	public static boolean[][] testarray(boolean[][] a){
		int N = a.length;//行数
		int M = a[0].length;//列数
		for(int i = 0; i < N; i++){
			for(int j = 0; j < M; j++){
				if(gcd(i,j) == 1)
					a[i][j] = true;
				else
					a[i][j] = false;
			}
		}
		return a;
	}
	
	public static void main(String[] args){
		//1.1.2.c
		StdOut.println("1.1.2.c:");
		if(4.1 >= 4)
		StdOut.println("True"); //测试结果为:True
		//1.1.2.d
		StdOut.println("1.1.2.d:");
		StdOut.println(1 + 2 + "3");//测试结果为:33
		//1.1.3
		StdOut.println("1.1.3:");
		int a = Integer.parseInt(args[0]);
		int b = Integer.parseInt(args[1]);
		int c = Integer.parseInt(args[2]);
		if(a == b && b == c)
			StdOut.println("equal");
		else
			StdOut.println("Not equal");
		//1.1.6
		StdOut.println("1.1.6");
		int f = 0;
		int g = 1;
		for(int i = 0; i <= 15; i++){
			StdOut.printf("%d ", f);
			f = f + g;
			g = f - g;
		}
		StdOut.printf("\n");
		//1.1.7.a
		StdOut.println("1.1.7.a");
		double t = 9.0;
		while(Math.abs(t - 9.0 / t) > .001){
			t = (9.0 / t + t) / 2.0;
		}
		StdOut.println(t);
		//1.1.7.b
		StdOut.println("1.1.7.b");
		int sum = 0;
		for(int i = 1; i < 1000; i++)
			for(int j = 0; j < i; j++)
				sum++;
		StdOut.println(sum);
		//1.1.7.c
		StdOut.println("1.1.7.c");
		sum = 0;
		for(int i = 1; i < 1000; i *= 2)
			for(int j = 0; j < 1000; j++)
				sum++;
		StdOut.println(sum);
		//1.1.8
		StdOut.println("1.1.8");
		System.out.println('b');
		System.out.println('b' + 'c');
		System.out.println((char)('a' + 4));
		//1.1.9
		StdOut.println("1.1.9");
		String s = "";
		for(int n = 10; n > 0; n /= 2)
			s = (n % 2) + s;//新得到的字符,该是由字符串前方加入
		StdOut.println(s);
		//另一种Java内置方法
		//Integer.toBinaryString(N);//将N转换成二进制
		//1.1.12
		StdOut.println("1.1.12");
		int[] a12 = new int[10];//同一节题目中出现同样的标识符的测试代码,在标识符后面加题号区分
		for(int i = 0; i < 10; i++)
			a12[i] = 9 - i;
		for(int i = 0; i < 10; i++)
			a12[i] = a12[a12[i]];
		for(int i = 0; i < 10; i++)
			System.out.printf("%d ", i);
		StdOut.println();
		//1.1.13
		StdOut.println("1.1.13");
		int [][]a13 = {
  {1, 2, 3},{4, 5, 6}};
		int [][]b13 = new int[3][2];//b13是a13的转置
		for(int i = 0; i < 2; i++)
			for(int
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值