轉載:JAVA企業面試題精選 Java基礎 31-40

假裝鎮定發表於2018-09-26

轉載:https://blog.csdn.net/qq_38131668/article/details/75049972

1.31.寫Java程式碼,列印如下楊輝三角:

             1
           1  1
        1   2   1
     1   3   3   1
   1  4   6   4  1
1  5  10 10  5  1

參考答案:

public class Q031 {
    public static void main(String[] args) {
        int n = 6;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n - i; j++) {
                System.out.println(" ");
            }
            // 列印空格後面的字元,從第1列開始往後列印
            for (int j = 1; j <= i; j++) {
                System.out.print(num(i, j) + " ");
            }
        System.out.println();
    }
}

    public static int num(int x, int y) { // 第x行,第y行
        if (y == 1 || y == x) {
            return 1;
        }
        int c = num(x - 1, y - 1) + num(x - 1, y);
        return c;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

1.32.使用Java完成快速排序演算法

參考答案:

public class QuickSort {
    // 排序方法,接受一個int[]引數,將會呼叫快速排序方法進行排序
    public static void sort(int[] number) {
        quickSort(number, 0, number.length - 1);
    }

    // 快速排序方法
    private static void quickSort(int[] number, int left, int right) {
        if (left < right) {
            int s = number[left];
            int i = left;
            int j = right + 1;
            while (true) {
                // 向右找大於s的數的索引
                while (i + 1 < number.length && number[++i] < s);
                // 向左找小於s的數的索引
                while (j - 1 > -1 && number[--j] > s);
                // 如果i>=j,退出迴圈
                if (i >= j) {
                    break;
                }
                // 否則交換索引i和j的元素
                swap(number, i, j);
            }
            number[left] = number[j];
            number[j] = s;
            // 對左邊進行遞迴
            quickSort(number, left, j - 1);
            quickSort(number, j + 1, right);
        }
    }

    // 交換陣列number中的索引為i、j的元素
    private static void swap (int[] number, int i, int j){
        int t;
        t = number[i];
        number[i] = number[j];
        number[j] = t;
    }

    public static void main(String[] args) {
        int[] num = { 34, 1, 23, 345, 12, 546, 131, 54, 78, 6543, 321, 85, 1234, 7, 76, 234};
        sort(num);
        for (int i = 0; i < num.length; i++) {
            System.out.println(num[i]);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

1.33.設有n個人圍成一圈,從第1個人開始報數,數到第m個人出列,然後從出列的下一個人開始報數,數到第m個人又出列,…,如此反覆到所有人全部出列位置。設n個人的編號分別為1,2,…,n,列印出出列順序

參考答案:

public class Q033 {
    private static boolean same(int[] p, int l, int n) {
        for (int i = 0; i < l; i++) {
            if (p[i] == n) {
                return true;
            }
        }
        return false;
    }

    public static void play(int playerNum, int step) {
        int[] p = new int[playerNum];
        int counter = 1;
        while (true) {
            if (counter > playerNum * step) {
                break;
            }
            for (int i = 1; i < playerNum + 1; i++) {
                while (true) {
                    if (same(p, playerNum, i) == false) {
                        break;
                    } else {
                        i = i + 1;
                    }
                }
                if (i > playerNum) {
                    break;
                }
                if (counter % step == 0) {
                    System.out.print(i + " ");
                    p[counter / step - 1] = i;
                }
                counter += 1;
            }
        }
        System.out.println();
    }

    public static void main(String[] args) {
        play(10, 7);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

1.34.寫一段小程式檢查數字是否為質數

參考答案:

public class Q034 {
    public boolean prime(int n) {
        if (n <= 0) {
            System.exit(0);
        }
        for (int i = 2; i <= n; i++) {
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if ((n % j == 0) && (j != n)) {
                    return false;
                }
            }
        }
        return true;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

1.35.1到100自然數,放入到a[99]這個陣列中,寫一個函式找出沒有被放進陣列的那個數字

參考答案:

public class Q035 {
    public static void main(String[] args) {
        // 模擬a[99]陣列
        int[] b = new int[99];
        for (int i = 0; i < 99; i++) {
            b[i] = i + 1;
        }
        int[] a = new int[100];
        for (int t : b) {
            a[t - 1] = t;
        }
        for (int t = 0; t < a.length; t++) {
            if (a[t] == 0) {
                System.out.println(t + 1);
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

1.36.找出101到200自然數中的質數,for迴圈越少越好

參考答案:

public class Q036 {
    public static void main(String[] args) {
        for (int i = 101; i <= 200; i++) {
            boolean b = true;
            for (int n = 2; n < i; n++) {
                if (i % n == 0) {
                    b = false;
                    break;
                }
            }
            if (b) {
                System.out.println(i);
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

1.37.用陣列實現一個棧(Stack),至少有入棧方法push和出棧方法pop

參考答案:

import java.util.Arrays;

class Stack {
    private Object[] data; // 棧的內容
    private int size = 0; // 棧內的元素個數

    public Stack() {
        data = new Object[0];
    }

    // 判斷棧是否滿
    public boolean isFull() {
        // 當陣列長度與棧內元素個數相同或者陣列長度為0並且元素個數為0時
        return data.length == size || (data.length == 0 && size == 0);
    }

    // 判斷棧是否empty
    public boolean isEmpty() {
        return size == 0;
    }

    // 陣列擴容10個
    public void increData() {
        data = Arrays.copyOf(data, data.length + 10);
    }

    // 入棧操作
    public void push(Object obj) {
        if (isFull()){
            increData();
        }
        size++;
        data[size - 1] = obj;
    }

    // 出棧操作
    public Object pop() {
        Object o = data[size - 1];
        data[size - 1] = null;
        size--;
        return o;
    }
}

public class Q037 {
    public static void main(String[] args) {
        Stack stack = new Stack();
        stack.push(1);
        stack.push("123");
        Object o = stack.pop();
        System.out.println(o);
        o = stack.pop();
        System.out.println(o);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

1.38.a、b、c為3個整型變數,在不引入第4個變數的前提下寫一個演算法實現a=b、b=c、c=a?

參考答案:

public class Q038 {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int c = 3;
        a = b - a;
        b = b - a;
        a = a + b;
        b = c - b;
        c = c - b;
        b = c + b;
        System.out.println("a:" + a + "b:" + b + "c:" + c);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

1.39.Java程式設計寫出1000-2000可以被3整除的數

參考答案:

public class Q039 {
    public static void main(String[] args) {
        for (int i = 1000; i <= 2000; i++) {
            if (i % 3 == 0) {
                System.out.println(i);
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1.40.有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第四個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?

參考答案:

public class Q040 {
    public static void main(String[] args) {
        System.out.println("第1個月的兔子對數:1");
        System.out.println("第2個月的兔子對數:1");
        int f1 = 1, f2 = 1, f, M =24;
        for (int i = 3; i <= M; i++) {
            f = f2;
            f2 = f1 + f2;
            f1 = f;
            System.out.println("第" + i + "個月的兔子對數:" + f2);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

相關文章