• Java经典练习题_Day04


    一、选择题

    1. 下列关于数组的说法正确的是:(A)

      A. 在Java中数组的长度是可变的

      B. 数组中存储的数据的类型是相同的

      C. 数组在进行扩容操作的时候源数组的地址不发生改变

      D. int[] arr = new int[3]; arr = new int[10];是将数组的大小扩容到了10且数组中的元素依然保留了下来

      E. 数组是存储到栈内存中的。

    2. 下列各项中关于数组的定义正确的是:(ACD)

      A. int[][] arr = new int[2][];  

      B. int[2][] arr = new int[][3];

      C. int[] arr[] = new int[2][2];  

      D. int arr[][] = new int[3][];

      E. int[3][3] arr = new int[][];

    3. 已知数组int[ ] x,y[ ]都已经初始化,则下列各项能够正确赋值的是:(ADE)

      A. y = x;  B. y[0] = x;  C. y = x[0];  D. y[0] = x[0];  E. y[0][0] = x[0];

    4. 下列数组的声明有哪些是对的?错的应该怎么修改?(AB)

      A. int[] a;

      B. int a[] = new int[3];

      C. int[] a;

          a = {1,2,3,4,5};

      改:int[] a;

        a[0] = 1;

      D. int[] a = new int[3]{1,2,3};  

      改: int[] a = new int[]{1,2,3};

    二、编程题

    1、定义一个数组arr,读入一个整数n,如果n在数组中存在,则输出n的下标;如果不存在,则输出-1。

    import java.util.*;
    /*
     * 定义一个数组arr
     * 读入一个整数n
     * 如果n在数组中存在,则输出n的下标
     * 如果不存在,则输出-1
     */
    public class Array01 {
        public static void main(String[] args) {
            System.out.print("请输入一个整数:");
            int arr[] = {1,2,3,4,5,6,7,8,9,0};
            Scanner s = new Scanner(System.in);
            int n = s.nextInt();
            int i = 0;
            
            while(i<arr.length){
                if(arr[i] == n){
                    System.out.println("下标:" + i);
                    break;
                }
    
                i++;
            }
            if(arr[9] != n)
                System.out.println("-1");
        }
    }

    2、已知一个二维数组A表示一个矩阵,求AT。

     其中AT表示二维数组A的转置,例如下面的例子:

    3*2的二维数组:

    public class Arr01 {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[][] a={{1,2,3},{4,5,6}};
            int[][] b=new int[a[0].length][a.length];
    
            for(int i=0;i<a.length;i++){
                for(int j=0;j<a[0].length;j++){
                    b[j][i]=a[i][j];
                }
            }
            //输转换矩阵数组
            for(int i=0;i<b.length;i++){
                for(int j=0;j<b[0].length;j++){
                    System.out.print(b[i][j]+" ");
                }
                System.out.println();
            }
        } 
    }

     3*3的二维数组:

    public class Arr {
        public static void main(String[] args) throws Exception {
            int data[][] = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
            System.out.println("原来的数组:");
            print(data); //调用打印方法
            System.out.println("置换后数组:");
            DaoZhi(data);//调用倒置排序方法
        }
     
        // 二维数组列行倒置排序法
        public static void DaoZhi(int arr[][]) {
            // TODO Auto-generated method stub
            for(int i=0; i<arr.length; i++) {
                for(int j=i; j<arr[i].length; j++) {
                    if(i != j) {
                        int temp  = arr[i][j];
                        arr[i][j] = arr[j][i];
                        arr[j][i] = temp;
                    }
                }
            }
            print(arr);//调用打印方法
        }
        // 打印方法
        public static void print(int arr[][]) {
            for(int i=0; i<arr.length; i++) {
                for(int j=0; j<arr[i].length; j++) {
                    System.out.print(arr[i][j] + " ");
                }
                System.out.println("");
            }
        }
    }

     3、给定一个数组,将这个数组中的所有元素颠倒

    一维数组:

    public class Arr01 {
        public static void main(String[] args) {
            int A[] = {1, 2, 3, 4, 5};
            int Len = A.length-1;
            for(int i=0, j=Len; i<j; i++, j--){
                int iTemp = A[i];
                A[i] = A[j];
                A[j] = iTemp;
            }
            //foreach循环遍历数组
            for(int a:A)
                System.out.print(a);
        }
    }

    二维数组:

    public class AFanzhuan {
        public static void main(String[] args) {
            int a[][] = {{1,2,3},{4,5,6}};
            int[][] b = new int[2][3];
            
            for(int i=0; i<a.length; i++){
                for(int j=0; j<a[i].length; j++){
                    b[i][j] = a[a.length-1-i][a[i].length-j-1];
                    System.out.print(b[i][j] + " ");
                }
                System.out.println();
            }
        }
    }

    4、杨辉三角

    1    
    1    1    
    1    2    1    
    1    3    3    1    
    1    4    6    4    1    
    1    5    10    10    5    1    
    1    6    15    20    15    6    1    
    …………

    杨辉三角的特点:
    1) 第i行有i个元素
    2) 每一行的每一个元素和最后一个元素都是1
    3) 除了1之外,每个元素的值都等于上一行同位置的元素以及前一个元素的和。
    要求:输入一个数,输出对应的行数

    import java.util.*;
    
    public class YangHui {
        public static void main(String[] args) {
            System.out.print("input:");
            Scanner s = new Scanner(System.in);
            int n = s.nextInt();
            int[][] arr = new int[n][];
            
            
            for(int i=0; i<n; i++){
                arr[i] = new int[i+1];
                for(int j=0; j<=i; j++){
                    if(j == 0 || j == i){
                        arr[i][j] = 1;
                    } 
                    else {
                        //每一个元素是它上一行的元素和斜对角元素之和
                        arr[i][j] = arr[i -1][j] + arr[i - 1][j - 1];
                    }
                    System.out.print(arr[i][j] + "	");
                }
                System.out.println();
            }
        }
    }

    5. 15个猴子围成一圈选大王

    依次1-7循环报数,报到7的猴子被淘汰,直到最后一只猴子成为大王。问:哪只猴子会成为大王?

    public class Monkey {
        public static void main(String[] args) {
            int[] a = new int[15];
            int n = 0;
            int c = 0;
            
            for(int i=0; i<a.length; i++){
                a[i] = i;
            }
            
            while(true){
                for(int i=1; i<=7; i++){
                    //如果a[n]==99就跳过这个元素
                    //比如遍历到a[6]==99,那就i--,相当于没有对他进行遍历
                    if(a[n]==99){
                        i--;
                        n++;
                        if(n==15){
                            n = 0;
                        }
                        continue;
                    }
                    //如果i==7,给它标记位99
                    if(i==7){
                        a[n] = 99;
                    }
                    //
                    n++;
                    if(n==15){
                        n = 0;
                    }
                    //遍历数组,寻找里面有多少个99,如果有14个99,就跳出循环
                    int b = 0;
                    for(int j=0; j<15; j++){
                        if(a[j]==99)
                            b++;
                        if(b==14)
                            c = 1;
                    }
                    if(c==1)
                        break;
                }
                if(c==1)
                    break;
            }
            for(int arr:a)
                System.out.print(arr+" ");
        }
    }

    6. 螺旋填数。

    读入两个整数m,n,输出一个m行n列的矩阵,这个矩阵是1~m*n这些自然数按照右、下、左、上螺旋填入的结果。
    例如读入数字4,5,则输出结果为:
    1     2    3    4   5
    14  15  16  17  6
    13  20  19  18  7
    12  11  10   9   8

    package Day8_06;
    /*读入两个整数m,n,输出一个m行n列的矩阵,这个矩阵是1~m*n这些自然数按照右、下、左、上螺旋填入的结果。
     * 例如读入数字4,5,则输出结果为:
     * 1     2    3    4    5
     * 14  15  16  17  6
     * 13  20  19  18  7
     * 12  11  10   9   8
     */
    import java.util.Scanner;
    
    public class LuoXuan {
        public static void main(String[] args) {
            System.out.println("Input:");
            Scanner s = new Scanner(System.in);
            int m = s.nextInt();
            int n = s.nextInt();
    
            int[][] arr = new int[m][n];
            int x; //横坐标
            int y; //竖坐标
            int z = 1; //给数组元素赋的值
            int c = 0;
            
            while(true){
                if(z > m * n)
                    break;
                // 打印第(c)行
                for(x=c,y=c; y<n-c; y++){
                    arr[x][y] = z;
                    z++; 
                }
                // 打印第(n-c)列
                for(x=c+1,y=n-1-c; x<m-c; x++){
                    arr[x][y] = z;
                    z++;
                }
                // 打印第(m-1-c)行
                for(x=m-1-c,y=n-2-c; y>=c; y--){
                    arr[x][y] = z;
                    z++;
                }
                // 打印第(c)列
                for(x=m-2-c,y=c; x>c; x--){
                    arr[x][y] = z;
                    z++;
                }
                c++;
            }
            for(int i=0; i<m; i++){
                for(int j=0; j<n; j++){
                    System.out.print(arr[i][j] + "	");
                }
                System.out.println();
            }
        }
    }
  • 相关阅读:
    zbb20170621 linux CentOS 7上安装jdk时提示:/lib/ld-linux.so.2: bad ELF interpreter
    zbb20170620 eclipse tomcat 临时目录
    zbb20170619 bat cmd 脚本相关
    zbb20170613 linux 安装 mysql
    1.1 Eclipse的安装
    2、数据库和数据库表操作
    1、MySql的安装和连接测试并给root用户赋密码
    1、SpringMVC+MyBaits实现查询所有
    1、第一个SpringMVC程序
    2.SSH 两个表全套增删改(运动员住宿管理)
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9428518.html
Copyright © 2020-2023  润新知