第一章部分答案

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 =  0 i <  M i ++){
            for ( int j =  0 j <  N j ++){
                if(a[i][j])
                    System. out.print( "*" " ") ;
                System. out.print( " ") ;
            }
            System. out.println() ;
        }
    }

    //产生随机布尔值
    public static boolean[][]  RandomInit( boolean[][] a){
        for( int i =  0 i <  M i ++){
            for ( int j =  0 j <  N j ++){
                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 =  0 i <  M i ++){
            for( int j =  0 j <  N j ++) {  //一定注意第二个 是j 不是i; 找了一晚上,心态爆炸!!!!
                num2[j][i] = num1[i][j] //定义为[N][M]就已经改变了数组的大小,自然可以放得下
            }
        }
        //显示反转后的数组
        for( int i =  0 i <  N i ++){
            for ( int j =  0 j <  j ++){
                System. out.print(num2[i][j] +  " ") ;
            }
            System. out.println() ;
        }
    }

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

1.1.14 编写一个静态方法lg(),接受一个整型参数N,返回不大于log 2 N的最大整数。不使用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 =  0 i < M i ++){
            R[i] =  0 //将默认数组清空
        }

        for( int i =  0 i < a. length i ++){
            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(a M) ;
for( int i =  0 i < R. length i ++){
    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) ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值