吹静静

欢迎QQ交流:592590682

一、选择题

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] + "\t");
            }
            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] + "\t");
            }
            System.out.println();
        }
    }
}

 

posted on 2018-08-09 11:36  吹静静  阅读(1075)  评论(0编辑  收藏  举报