Java数组编程练习题(面试题)

目录

1. 输入10位同学的java成绩:(1)求平均成绩,最高成绩、最低成绩;(2)对10的成绩按照从低到高的顺序排列(选做)

2. 给定一个数组,判断某个元素是否在该数组中

3. 给定一个数组,大小为10,输入十个同学的成绩,求这些成绩的总分数;某一天转入2个新同学,请再次求12个同学的平均成绩(尝试着使用扩容的形式做)

4. 有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币

5. 将数组中的重复数据去重

6. 如何将10个0-10随机存入数组中

7. 存在整数数组nums,将该数组中的所有偶数元素排列到奇数元素前

8. 执行下列程序的输出结果为: ( D )

9. 某个人进入如下一个棋盘中,要求从左上角开始走,最后从右下角出来(要求只能前进,不能后退),问题:共有多少种走法?


1. 输入10位同学的java成绩:(1)求平均成绩,最高成绩、最低成绩;(2)对10的成绩按照从低到高的顺序排列(选做)

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

/*
 * 请输入10位同学的java成绩,
 *  1、求平均成绩,最高成绩、最低成绩
 *  2、对10的成绩按照从低到高的顺序排列(选做)
 */
public class Test1 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请依次输入10位同学的java成绩:");
		int[] arr = new int[10];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = scanner.nextInt();
		}
		// 68 75 58 71 89 77 88 91 49 66
		System.out.print("十位同学的java成绩为:");
		System.out.println(Arrays.toString(arr));
		float averScore = findAverScore(arr);
		System.out.println("平均成绩为:" + averScore); // 73.2
		int maxScore = findMaxScore(arr);
		System.out.println("最大成绩为:" + maxScore); // 91
		int minScore = findMinScore(arr);
		System.out.println("最小成绩为:" + minScore); // 49
		
		// 定义一个排序函数:对10的成绩按照从低到高的顺序排列
//		bubbleSort(arr); // 冒泡排序
//		selectSort(arr); // 选择排序
		insertSort(arr); // 插入排序
		System.out.println(Arrays.toString(arr));
	}

	public static void insertSort(int[] arr) {
		// TODO Auto-generated method stub
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = i + 1; j > 0; j--) {
				if (arr[j] < arr[j - 1]) {
					swap(arr, j, j - 1);
				}
			}
		}
	}

	public static void selectSort(int[] arr) {
		// TODO Auto-generated method stub
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[j] < arr[i]) {
					swap(arr, j, j - 1);
				}
			}
		}
	}

	public static void bubbleSort(int[] arr) {
		// TODO Auto-generated method stub
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = 0; j < arr.length - 1; j++) {
				if (arr[j] > arr[j + 1]) {
					swap(arr, j, j + 1);
				}
			}
		}
	}

	public static void swap(int[] arr, int i, int j) {
		// 异或法交互两个变量
		arr[i] = arr[i] ^ arr[j];
		arr[j] = arr[i] ^ arr[j];
		arr[i] = arr[i] ^ arr[j];
	}

	public static int findMinScore(int[] arr) {
		// TODO Auto-generated method stub
		int minScore = arr[0];
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] < minScore) {
				minScore = arr[i];
			}
		}
		return minScore;
	}

	public static int findMaxScore(int[] arr) {
		// TODO Auto-generated method stub
		int maxScore = arr[0];
		for (int i = 1; i < arr.length; i++) {
			if (arr[i] > maxScore) {
				maxScore = arr[i];
			}
		}
		return maxScore;
	}

	public static float findAverScore(int[] arr) {
		// TODO Auto-generated method stub
		float averScore;
		float sum = 0;
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
		}
		averScore = sum / arr.length;
		return averScore;
	}
}

结果:

2. 给定一个数组,判断某个元素是否在该数组中

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

public class Test2 {
	public static void main(String[] args) {
		/*
		 * 给定一个数组,判断某个元素是否在该数组中
		 */
		int[] arr = {68, 75, 58, 71, 89, 77, 88, 91, 49, 66};
		Scanner scanner = new Scanner(System.in);
		System.out.print("请输入一个要查找的数:");
		int target = scanner.nextInt();
		int index = binarySearch(arr, 0, arr.length - 1, target);
		if (index == -1) {
			System.out.println("很遗憾,你要找的数不在数组中!");
		}else {
			System.out.println("你要找的数在数组中!");
		}
	}

	public static int binarySearch(int[] arr, int start, int end, int target) {
		// 二分查找前提是要让arr有序
		Arrays.sort(arr);
		int mid = (start + end) >> 1;
		if (start <= end) {
			if (arr[mid] == target) {
				return mid;
			}else if (arr[mid] < target) {
				start = mid + 1;
				return binarySearch(arr, start, end, target);
			}else {
				end = mid - 1;
				return binarySearch(arr, start, end, target);
			}
		}
		return -1;
	}
}

结果:

3. 给定一个数组,大小为10,输入十个同学的成绩,求这些成绩的总分数;某一天转入2个新同学,请再次求12个同学的平均成绩(尝试着使用扩容的形式做)

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

public class Test3 {
	/*
	 * 给定一个数组,大小为10,输入十个同学的成绩,求这些成绩的总分数;
	 * 某一天转入2个新同学,请再次求12个同学的平均成绩(尝试着使用扩容的形式做)
	 */
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入10个同学的成绩:");
		int[] arr = new int[10];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = scanner.nextInt();
		}
		int sum = sumScore(arr);
		System.out.println("总成绩为:" + sum);
		// 新转来两个,数组扩容
		arr = expandCapacity(arr);
		System.out.println(Arrays.toString(arr));
		sum = sumScore(arr);
		float aver = sum / arr.length;
		System.out.println("平均值为:" + aver);
	}

	public static int[] expandCapacity(int[] arr) {
		// 数组扩容
		Scanner scanner = new Scanner(System.in);
		System.out.print("请输入两个新同学的成绩:");
		int[] arr1 = new int[arr.length + 2];
		for (int i = 0; i < arr1.length; i++) {
			if (i < arr.length) {
				arr1[i] = arr[i];
			}else {
				arr1[i] = scanner.nextInt();
			}
		}
		return arr1;
	}

	public static int sumScore(int[] arr) {
		// 求和
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
		}
		return sum;
	}
}

结果:

4. 有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币

       桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。(LeetCode)

public class Test4 {
	/*
	 * ·有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币
	 * {10, 8, 5, 3, 27, 99}
	 */
	public static void main(String[] args) {
		int[] coins = {10, 8, 5, 3, 27, 99};
		int result = minCount(coins);
		System.out.println("最少" + result + "次可以拿完硬币");
	}
	
	public static int minCount(int[] coins) {
		int count = 0;
        for(int i = 0; i < coins.length; i++) {
            if(coins[i] % 2 == 0) {
                count += (coins[i] / 2);
            }else{
                count += (coins[i] / 2 + 1);
            }
        }
        return count;
    }
}

结果:

5. 将数组中的重复数据去重

笨方法,双层循环

package com.openlab.day09.exer;

import java.util.Arrays;

public class Test5 {
	// 将数组中的重复数据去重
	public static void main(String[] args) {
		int[] arr = {5, 4 ,9, 5, 2, 5, 8, 4};
		arr = removeRepeat(arr);
		System.out.println(Arrays.toString(arr));
	}

	public static int[] removeRepeat(int[] arr) {
		// 将数组中的重复元素去除
		int[] temp = new int[arr.length];
		int count = 0;
		boolean isFlag = true;
		for (int i = 0; i < temp.length; i++) {
			for (int j = 0; j < temp.length; j++) {
				if (temp[j] == arr[i]) {
					isFlag = false;
				}
			}
			if (isFlag) {
				temp[count++] = arr[i];
			}
			isFlag = true;
		}
		int[] newArr = new int[count];
		for (int i = 0; i < newArr.length; i++) {
			newArr[i] = temp[i];
		}
		return newArr;
	}
}

结果:

6. 如何将10个0-10随机存入数组中

public class Test6 {
	// 如何将10个0-10随机存入数组中
	public static void main(String[] args) {
		int[] arr = new int[10];
		putRandomArray(arr);
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + "\t");
		}
	}

	private static void putRandomArray(int[] arr) {
		// 随机存入数组
		for (int i = 0; i < arr.length; i++) {
			int randomNum = (int)(Math.random() * 11);
			arr[i] = randomNum;
		}
	}
}

结果:

7. 存在整数数组nums,将该数组中的所有偶数元素排列到奇数元素前

import java.util.Arrays;

public class Test7 {
	public static void main(String[] args) {
		int[] nums = {1, 4, 5, 3, 6, 7, 10};
		exchange(nums);
		System.out.println(Arrays.toString(nums));
	}
	
	public static void exchange(int[] nums) {
		int i = 0, j = nums.length - 1;
		while(i < j) {
			while(nums[i] % 2 == 0) {
				i++;
			}
			while(nums[j] % 2 == 1) {
				j--;
			}
			if (i < j) {
				swap(nums, i, j);
			}
		}
    }

	public static void swap(int[] nums, int i, int j) {
		// 交换数组中两个元素的值
		nums[i] = nums[i] ^ nums[j];
		nums[j] = nums[i] ^ nums[j];
		nums[i] = nums[i] ^ nums[j];
	}
}

结果:

8. 执行下列程序的输出结果为: ( D )

public class Test {
	public static void main(String[] args) {
		String s1 = "HelloWorld";
		String s2 = new String("HelloWorld");
		if (s1 == s2) {
			System.out.println("s1 == s2");
		}else {
			System.out.println("s1 != s2");
		}
		if (s1.equals(s2)) {
			System.out.println("s1 equals s2");
		} else {
			System.out.println("s1 not equals s2");
		}
	}
}

    A. s1 == s2
        s1 not equals s2
    B. s1 == s2
        s1 equals s2
    C. s1 != s2
        s1 not equals s2
    D. s1 != s2
        s1 equals s2

解析:字符串是一个对象,在java中 == 判断的是值是否相等,不能用来判断字符串,因为字符串的创建方式有多种,不同的创建方式,地址(指针) 可能不一致。在java中 == 判断的是值是否相等,不能用来判断字符串,字符串中 == 判断的字符串的地址,equals判断是字符串的值;s1和s2是两个不同的字符串对象,所以地址不一样,所以s1 != s2;s1 equals s2,故选D。

9. 某个人进入如下一个棋盘中,要求从左上角开始走,最后从右下角出来(要求只能前进,不能后退),问题:共有多少种走法?

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

暂时不会

  • 8
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
1.输出所有的“水仙花数”,水仙花数是指一个三位数,这个数的各位数字的立方和就是该数本身。 2.将一个正整数分解质因数,如:18=2*3*3; 3.输入两个正整数,求这两个数的最大公约数和最小公倍数; 4.输入一行字符,统计其中英文字母,空格,数字和其他字符的个数; 5.一个整数加上100后是个完全平方数,加上168后也是一个完全平方数,求这个数; 6.输出9*9口诀; 7.两个乒乓球队比赛,各出三人,甲队抽签派出a,b,c三人,乙队派出x,y,z三人,已知a不和x比,c不和x,z比,编程求出对战情况; 8.打印出如下图形: * *** ***** ******* ***** *** * 9.给一个不多于五位的正整数,求它是几位数,并逆序输出它的各位数字; 10.请输入星期几的第一个字母来判断是星期几,如果一样,则判断第二个字母; 11.求一个3*3矩阵对角线元素之和; 12.有一个已经排好序的数组,先输入一个数,按原先的顺序插入其中; 13.取一个整数a从右端开始的4~7位; 14.打印出杨辉三角形前十行,如下: 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 ...................... 15.输入数组,最大的与第一个交换,最小的数与最后一个数交换,输出数组; 16.输入n个数,使其前m个数向后移动m个位置,最后面的m个数移到最前面; 17.有n个人围成一个圈子,从第一个人开始报数,报到3的退下,问最后留下的是编号为几的人; 18.字符串排序; 19.海滩上有一堆桃子,五只猴子来分,第一只猴子均分成5份,多出一个,扔进海里,自己拿走一份,第二三四五只猴子均这样做,问海滩上最初至少有多少个桃子; 20.求0~7所能组成的奇数的个数; 21.一个偶数总能表示成两个素数的和,输出所有可能的素数对; 22.两个字符串连接程序; 23.有5个同学,每个同学有三门课成绩,从键盘输入学号,姓名和三门课的成绩,取平均数,将数据存放在磁盘文件stud中; 24.如果一个数恰好等于它的因子之和,则叫“完数”求1000以内所有完数;
基础数据结构是Java编程中非常重要的一部分,练习题可以帮助我们巩固对这些数据结构的理解和使用。下面是一些常见的Java基础数据结构练习题: 1. 数组反转:编写一个方法,将给定的数组按照逆序进行排列。 2. 查找元素:编写一个方法,在给定的有序整数数组中查找指定元素,返回其索引;如果不存在,则返回-1。 3. 字符串反转:编写一个方法,将给定的字符串按照逆序进行排列。 4. 链表逆序:编写一个方法,将给定的单链表进行逆序排列。 5. 栈的应用:使用栈来检查给定的括号序列是否合法,例如{[()]}是合法的,而{[(])}是非法的。 6. 队列的应用:使用队列来实现热土豆游戏,每经过指定的时间,队列中的土豆将被传递给下一个人,最后队列中剩下的人即为胜者。 7. 哈希表应用:实现一个电话号码簿,可以添加、删除和查找联系人信息。 8. 树的遍历:实现二叉树的前序、中序和后序遍历算法。 9. 图的最短路径:使用Dijkstra算法求解给定图中两个节点的最短路径。 10. 排序算法:实现常见的排序算法,如冒泡排序、插入排序和快速排序。 通过这些练习题的学习和实践,我们可以巩固对基础数据结构的理解和运用,提高自己的编程能力。同时,这些题目也是我们面试和应聘工作中常见的考察点,掌握这些知识也有助于我们在求职过程中脱颖而出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会敲代码的HZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值