转载:JAVA企业面试题精选 Java基础 21-30

转载:https://blog.csdn.net/qq_38131668/article/details/75008770

1.21.请写出求n!的算法

参考答案:

public class Factorial {

    public static void main(String[] args) {
        long n = 5;
        System.out.println(doFactorial(n));
    }
    
    public static long doFactorial(long n) {
        if (n < 1) {
            System.out.printlin("ERROR");
            return 0;
        } else if (n == 1 || n == 2){
            return n;
        } else {
            return n * doFactorial(n - 1);
        }
    }
}

1.22.排序都有哪几种方法?

参考答案:

  排序的方法有:插入排序(直接插入排序、希尔排序)、交换排序(冒泡排序、快速排序)、选择排序(直接选择排序、堆排序)、归并排序、分配排序(箱排序、基数排序)。

1.23.写一个排序算法,将10个1-100随机数字进行排序

参考答案:

  选择排序法实现10个1-100随机数字的排序,代码如下所示:

public class SelectSort {

    public static void main(String[] args) {
        // 定义一个数组
        int[] num = new int[10];
        for (int i = 0; i < num.length; i++) {
            num[i] = (int)(Math.random() * 100) + 1;
        }
        // 排序
        selectionSort(num);
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + " ");
        }
    }

    // 选择排序方法
    public static void SelectionSort(int[] number) {
        for (int i = 0; i < number.length - 1; i++) {
            int m = i;
            for (int j = i + 1; j < number.length; j++) {
                if (number[j] < number[m]) {
                    m = j;
                }
            }
            if (i != m) {
                swap(number, i , m);
            }
        }
    }

    // 用于交换数组中的索引为i、j的元素
    private static void swap(int[] number, int i, int j) {
        int t;
        t = number[i];
        number[i] = number[j];
        number[j] = t;
    }
}

1.24.请用Java语言编写一个完成冒泡排序算法的程序

参考答案:

import java.util.Random;
import java.util.Arrays;

public class BubbleSort {

    public static void main(String[] args) {
        int[] arr = new int[10];
        for (int i = 0; i < arr.length; i++) {
            Random ran = new Random();
            arr[i] = ran.nextInt(100);
        }
        System.out.println(Arrays.toString(arr));
        // 冒泡排序
        System.out.println("--------冒泡排序开始--------")
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j+1]) {
                    int t = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = t;
                }
            }   
            System.out.println(Arrays.toString(arr));
        }
        System.out.println("--------冒泡排序结束--------");
        System.out.println(Arrays.toString(arr));
    }
}

1.25.有一数组a[1000]存放了1000个数,这1000个数取自1-999,且只有两个相同的数,剩下的998个数不同,写一个搜索算法找出相同的那个数的值?

参考答案:

import java.util.Arrays;

public class SearchDemo {
    /** 被搜索数据的大小 */
    private static final int size = 1000;
    public static void main(String[] args) {
        int[] data = new int[size];
        // 添加测试数据
        for (int k = 0; k < data.length; k++) {
            data[k] = k + 1;
        }
        data[999] = 567;
        result(data);
    }

    /**
    * 调用二分搜索算法的方法实现查找相同元素
    * @param data
    */
    public static void result(int data[]) {
        Arrays.sort(data);
        for (int i = 0; i < data.length; i++) {
            int target = data[i];
            data[i] = 0;
            int result = binaryFind(data, target);
            if (result != -1) {
                System.out.println("相同元素为:" + data[result]);
                break;
            }
        }
    }

    /**
    * 二分搜索算法实现
    * 
    * @param data
    *          数据集合
    * @param target
    *          搜索的数据
    * @return 返回找到的数据的位置,返回-1表示没有找到
    */
    public static int binaryFind(int[] data, int target) {
        int start = 0;
        int end = data.length - 1);
        while (start <= end) {
            int middleIndex = (start + end) / 2;
            if (target == data[middleIndex]) {
                return middleIndex;
            }
            if (target >= data[middleIndex]) {
                start = middleIndex + 1;
            } else {
                end = middleIndex - 1;
            }
        }
        return -1;
    }
}

1.26.现有一个32位的整型变量value和一个有32个元素的数组a[32],要求:1、对value随机赋值;2、让数组a[n]的值等于value”位n”的值,0<=n<=31。举例:如果value的”位0”(Bit0)=0,那么a[0]=0;如果value的”位10”(Bit10)=1,那么a[10]=1。

参考答案:

public class Foo {

    public static void main(String[] args) {
        // 产生随机数
        int random = (int)(Math.random() * Integer.MAX_VALUE + 1);
        // 转成二进制字符串
        String str = Integer.toBinaryString(random);
        // 转成二进制时最前面的零被省略,补上省略掉的0
        if (str.length() < 32) {
            for (int j = 0; j <= 32 - str.length(); j++) {
            str = "0" + str;
            }
        }
        // 给数组赋值
        int[] a = new int[32];
        for (int i = 0; i < str.length(); i++) {
            a[i] = Integer.parseInt(String.valueOf(str.charAt(i)));
            System.out.println("a[" + i + "]=" + a[i]);
        }
    }
}

1.27.有1~100共一百个自然数,已随机放入一个有98个元素的数组a[98]。要求写出一个尽量简单的方案,找出没有被放入数组的那2个数,并在屏幕上打印这2个数。注意:程序不用考虑实现自然数随机放入数组的过程。

参考答案:

    public static void main(String[] args) {
        int[] b = new int[]{ ....存入98个随机的1100的整数 };
        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.28.用1,2,2,3,4,5这六个数字,用Java写一个main函数,打印出所有不同的排列,如:512234,412345等,要求:”4”不能在第三位,”3”与”5”不能相连

参考答案:

import java.util.ArrayList;
import java.util.List;

public class Q028 {

    public static List<String> list = new ArrayList<String>();
    public static void group(String str, String nstr) {
        if (str.length() != nstr.length()) {
            String rest = getRest(str, nstr);
            for (int i = 0; i < rest.length(); i++) {
                String temp = str + rest.substring(i, i + 1);
                if (temp.indexOf("4") != 2 && temp.indexOf("35") == -1 && temp.indexOf("53") == -1) {
                    if (!list.contains(temp) && temp.length() == nstr.length()) {
                        list.add(temp);
                    }
                    group(temp, nstr);
                }
            }
        }
    }

    public static String getRest(String str, String nstr) {
        String rest = "";
        if (nstr.length() > str.length()) {
            rest = nstr;
            for (int i = 0; i < str.length(); i++) {
                // 注意此处的replaceFirst,而不是replaceAll
                rest = rest.replaceFirst(str.substring(i, i + 1),"");
            }
        }
        return rest;
    }

    public static void main(String[] args) {
        group("", "122345");
        System.out.println(list.toString());
    }
}

1.29.编写一个命令行程序,提示让用户输入2个整数,然后计算这2歌整数之间能被5整除的所有整数的和,并打印显示

参考答案:

import java.util.Arrays;
import java.util.Scanner;

public class Q029 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int[] nums = new int[2];
        System.out.println("请输入一个整数:");
        nums[0] = scan.nextInt();
        System.out.println("请输入第二个整数:");
        nums[1] = scan.nextInt();
        Arrays.sort(nums);
        int sum = 0;
        for (int begin = nums[0] + 1; begin < nums[1]; begin++) {
            if (begin % 5 == 0) {
                sum += begin;
            }
        }
        System.out.println(sum);
    }
}

1.30.编写一个命令行程序,提示让用户输入用户名和密码。如果用户名和密码都是admin,则显示登录成功;如果不是则显示登录失败,让用户重新输入。如果用户连续3次认证失败,则锁定终止程序

参考答案:

import java.util.Scanner;

public class Q030 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int count = 0;
        while (true) {
            System.out.println("请输入账号:");
            String name = scan.nextLine();
            System.out.println("请输入密码:");
            String pwd = scan.nextLine();
            if ("admin".equals(name) && "admin".equals(pwd)) {
                System.out.println("登录成功");
                break;
            } else {
                count++;
                if (count < 3) {
                    System.out.println("登录失败,请重新输入。");
                } else {
                    System.out.println("登录次数过多,认证失败");
                    break;
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/u012204535/article/details/82903426