Java基础编程题(3)

发布于:2022-12-08 ⋅ 阅读:(343) ⋅ 点赞:(0)

1.求数组的平均值,实现一个方法 avg, 以数组为参数, 求数组中所有元素的平均值(注意方法的返回值类型).

public static double avg(int[] array){
        int sum = 0;
        for (int i = 0; i < array.length; i++) {
            sum += array[i];
        }
        return sum*1.0/array.length;
    }
    public static void main(String[] args) {
        int[] array = new int[] {1,2,3,4,5,6,7,8};
        System.out.println(avg(array));
    }

2.数组所有元素之和,实现一个方法 sum, 以数组为参数, 求数组所有元素之和.

   public static double sum(int[] array){
        int sum = 0;
        for (int i = 0; i < array.length; i++) {
            sum += array[i];
        }
        return sum;
    }
    public static void main(String[] args) {
        int[] array = new int[]{1,2,3,4};
        System.out.println(sum(array));
    }

3.改变原有数组元素的值,实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素 乘以 2 , 并设置到对应的数组元素上. 例如 原数组为 {1, 2, 3}, 修改之后为 {2, 4, 6}

    public static int[] transform(int[] array) {
        int[] tmp = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            tmp[i] = array[i]*2;
        }
        return tmp;
    }
    public static void main(String[] args) {
        int[] array = new int[] {1,2,3};
        System.out.println("交换之前:"+Arrays.toString(array));
        int[] tmp = transform(array);
        System.out.println("交换之后:"+Arrays.toString(tmp));
}

4.打印数组,实现一个方法 printArray, 以数组为参数, 循环访问数组中的每个元素, 打印每个元素的值.


    public static void printArray(int[] array){
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
    }
    public static void main(String[] args) {
        int[] array = new int[] {1,2,3,4};
        printArray(array);
}

5.创建的数组,并且赋初始值,创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100

    public static void main(String[] args) {
        int[] array = new int[100];
        for (int i = 0; i < array.length; i++) {
            array[i] = i + 1;
        }
        System.out.println(Arrays.toString(array));
}

6.数组的拷贝,实现一个方法 copyOf, 对一个整型数组进行拷贝, 得到一个新的数组.

    public static int[] copyOf(int[] array){
        int[] arrayTmp = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            arrayTmp[i] = array[i];
        }
        return arrayTmp;
    }
    public static void main(String[] args) {
        int[] array1 = new int[]{1,2,3,4};
        int[] array2 = copyOf(array1);
        System.out.println(Arrays.toString(array2));
}

7.数组转字符串,实现一个方法 toString, 把一个整型数组转换成字符串. 例如数组 {1, 2, 3} , 返回的字符串为 "[1, 2, 3]", 注意 逗号 的位置和数量.

    public static void main(String[] args) {
        int[] array = new int[]{1,2,3,4};
        System.out.println(Arrays.toString(array));
}

8.二分查找,给定一个有序整型数组, 实现二分查找

//利用工具包实现
public static void main(String[] args) {
        int[] array = new int[] {1,45,78,99,234};
        int index = Arrays.binarySearch(array,99);
        if(index == -1){
            System.out.println("找不到!!!");
        }else{
            System.out.println("找到了,下标为:"+index);
        }
    }
 public static int binarySearch(int[] arr, int key){
        int left = 0;
        int right = arr.length-1;
        while(left < right){
            int mid = (left + right) / 2;
            if(arr[mid] < key){
                left = mid + 1;
            }else if(arr[mid] == key){
                return mid;
            }else{
                right = mid - 1;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] array = new int[] {1,45,78,99,234};
        int index = binarySearch(array,99);
        if(index == -1){
            System.out.println("没找到!!!");
        }else{
            System.out.println("找到了,下标为:"+index);
        }
    }

9.数组是否有序,给定一个整型数组, 判定数组是否有序(递增)

public static boolean func(int[] array){
        for (int i = 0; i < array.length-1; i++) {
            if (array[i] > array[i+1]){
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
        int[] array = new int[] {1,2,3,98,5};
        boolean tmp = func(array);
        if(tmp){
            System.out.println("有序!!!");
        }else{
            System.out.println("无序!!!");
        }
    }

10.冒泡排序,给定一个整型数组, 实现冒泡排序(升序排序)

    //利用工具包实现
    public static void main(String[] args) {
        int[] array = new int[]{1,34,5,67,9};
        Arrays.sort(array);
        System.out.println(Arrays.toString(array));
    }
 public static void bubbleSort(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j+1]){
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] array = new int[]{1,34,5,67,9};
        System.out.println("排序之前的数组:"+Arrays.toString(array));
        bubbleSort(array);
        System.out.println("排序之后的数组:"+Arrays.toString(array));
    }

11.只出现一次的数字,给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4

//本题考察异或:异或的特点是:1、n^n = 0;即两个相同的数字异或是0   2、0^n=n;即0和任何数字进行异或,结果就是那个任何数字。
    public static int findOne(int[] arr){
        int ret = 0;
        for (int x: arr) {
            ret ^= x;
        }
        return ret;
    }
    public static void main(String[] args) {
        int[] array = new int[] {4,1,2,1,2};
        System.out.println(findOne(array));
    }

12.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

public static void main(String[] args) {
        for (int i = 1; i <= 1000; i++) {
            int sum = 0;   //因子和
            for (int j = 1; j <= i/2; j++) {
                if (i % j == 0){
                    sum += j;
                }
            }
            if (sum == i){
                System.out.println(i + "是完数");
            }
        }
    }

13.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

public static void main(String[] args) {
        int i = -100;//其实范围还可以精确[-100,27956),通过解方程得出
        while(i < 27956){
            double a = Math.sqrt(100 + i);   //Math.sqrt默认类型是double
            double b = Math.sqrt(168 + 100 + i);
            if (a == (int)a && b == (int)b){
                System.out.println("该数为"+i);
            }
            i++;
        }
    }
public static void main(String[] args) {
        for (int i = -100; i < 27956; i++) {
            int a = (int) Math.sqrt(i + 100);    //Math.sqrt默认类型是double,所以要做强制类型转换
            int b = (int) Math.sqrt(i + 100 + 168);
            if ((a * a == i + 100) && (b * b == i + 268)){
                System.out.println(i);
            }
        }
    }

14.输入两个正整数m和n,求其最大公约数和最小公倍数。

//法一:
  public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        int max = m > n ? m : n;
        while(true){
            if((max % m == 0) && (max % n == 0)){
                System.out.println("最小公倍数:"+ max);
                break;
            }
            max++;
        }
        System.out.println("最大公约数:"+ m*n/max);
    }
//法二:分开求最小公倍数和最大公约数
    public static void Lcm(int a,int b){
        for (int i = 1; ; i++) {
            if ((i*a) % b == 0){
                System.out.println("最小公倍数:"+ i*a);
                break;
            }
        }
    }

    public static void Gcd(int a, int b){
        int c = a % b;
        while(c != 0){
            a = b;
            b = c;
            c = a % b;
        }
        System.out.println("最大公约数:"+ b);

    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        Lcm(m,n);
        Gcd(m,n);
    }

15.一球从h米高度自由落下,每次落地后反跳回原高度的一半再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请给h赋值:");
        double h = sc.nextDouble();
        System.out.println("请给n赋值:");
        int n = sc.nextInt();
        double s = 0.0;//总路程
        double h1 = 0.0;//反弹的高度
        for (int i = 1; i <= n; i++) {
            h1 = h / 2;
            s = s + h + h1;
            h = h1;
        }
        System.out.println("第" + n + "次反弹" + h1 + "米");
        System.out.println("共走了" + s + "米");
    }

本文含有隐藏内容,请 开通VIP 后查看