第一章部分答案

1.1.11
求一个布尔数组中为真的位置分布图。
public class Example1111 {

    public static final int 10;
    public static final int 4;
    public static void main(String [] args){
        boolean[][] a = new boolean[M][N];
        a = RandomInit(a);
        printBool(a);
    }

    //输出内容
    public static void printBool(boolean[][] a){
        for(int i = 0i < Mi ++){
            for (int j = 0j < Nj ++){
                if(a[i][j])
                    System.out.print("*" " ");
                System.out.print(" ");
            }
            System.out.println();
        }
    }

    //产生随机布尔值
    public static boolean[][] RandomInit(boolean[][] a){
        for(int i = 0i < Mi ++){
            for (int j = 0j < Nj ++){
                a[i][j] = StdRandom.bernoulli();
            }
        }
        return a;
    }
}


1.1.13 编写一段代码,打印出一个 M 行 N 列的二维数组的转置(交换行和列)

public class Example1113 {
    //Math.random()方法是产生一个双精度的范围为(0.00 - 1.00)之间的一个随机数
    public static final int 10;
    public static final int 5;
    public static final int 10;//定义产生随机数的范围
    public static void main(String [] args){
        //System.out.println((int)(Math.random()*10));
        int[][] num1 = new int[M][N];
        int[][] num2 = new int[N][M];
        num1 = RandomInitialization(num1,n);
        showResult(num1,num2);
    }

    public static void showResult(int[][] num1, int[][] num2){
        System.out.println("反转之后的数组为:");
        for(int i = 0i < Mi ++){
            for(int j = 0j < Nj ++) { //一定注意第二个 是j 不是i; 找了一晚上,心态爆炸!!!!
                num2[j][i] = num1[i][j]//定义为[N][M]就已经改变了数组的大小,自然可以放得下
            }
        }
        //显示反转后的数组
        for(int i = 0i < Ni ++){
            for (int j = 0j < j ++){
                System.out.print(num2[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static int[][] RandomInitialization(int [][] num, int n){
        StdOut.println("num1数组内容为:");
        for(int i = 0i < Mi ++){
            for (int j = 0j < Nj ++){
                num[i][j] = StdRandom.uniform(10);
                StdOut.print(num[i][j] + " ");
            }
            StdOut.println();
        }
        return num;
    }
}

1.1.14 编写一个静态方法lg(),接受一个整型参数N,返回不大于log2N的最大整数。不使用Math库。
public class Example1114 {
    /*
    题意要求是整数,所以N必然是大于0的,
    求的是(y = 2^x) <= N;
     */
    private static int 0;
    private static int 1;
    public static int lg(int N){
        if(N <= 0return -1;

        while(<=  N){
            *= 2;
            x++;
        }
        return x-1;
    }
}

1.1.15
public class Example1115 {
    public static int[] histogram(int []a, int M){
        int[] R =new int[M];
        for(int i = 0i < Mi ++){
            R[i] = 0//将默认数组清空
        }

        for(int i = 0i < a.lengthi ++){
            if(a[i] >= && a[i] < M ){
                R[a[i]] ++;
            }else{
                System.out.println("存在数字不在0到M-1之间,为:" + a[i]);
            }
        }
        return R;
    }

}

test.java:
//1115
int[] a = {0,3,4,4,1,5,2,4,};
int M = 9;
System.out.println("M = " + M);
int sum = 0;
int R[] = Example1115.histogram(aM);
for(int i = 0i < R.lengthi ++){
    System.out.print(R[i] + " ");
    sum += R[i];
}
System.out.println();

if(sum != a.length){
    System.out.println("是不相等的,且sum = " + sum + ", a.length = " + a.length);
}else {
    System.out.println("是相等的,且sum = a.length = " + sum);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值