题目:
问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。 输入格式:第一行是一个整数 N, N £ 20;接下来有 N行,每一行表示一个整数,并且按照从小到大的顺序排列。 输出格式:输出只有一行,即出现次数最多的那个元素值。 输入输出样例 样例输入 5 100 150 150 200 250 样例输出 150思路:
开始首先要判断n的范围,如果不判断n的范围,那么第六七个测试点就是错误的。
这道题我先用了两个for循环,来找到数组中有相同的数字,并计数,没有为0,两个数字相同为1.依次类推。
计数之后,再找到计数数组a中最大的数字,即数组中一个数字出现的最大次数。因为计数数组a的下标和记数字的
数组b的下标相同,所以根据计数数组a的下标找出所对应的数字。
如果这个数组中没有相同的数字,所要输出的数字是你输入的数组的第一个数字。
代码:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); if (n > 20 && n <= 0) {} //根据题意,如果n不在0~20之间就不输出任何东西 if (n <= 20 && n > 0) { //n在0~20之间再进行下面的查找 int[] m = new int[n]; int[] a = new int[n];// 记次数 int[] b = new int[n];// 记数字 for (int i = 0; i < n; i++) { m[i] = sc.nextInt(); } for (int i = 0; i < n; i++) {//寻找相同的数据 for (int j = 0; j < n; j++) { if (i != j && m[i] == m[j]) { a[i]++; //保存相同数据的次数,即数组中有几个相同的 b[i] = m[i];//将有相同的数字放在所对应的数组中 } } } int c = a[0]; for (int i = 0; i < n; i++) {//找到数组中的最大值 if (a[i] > c) { c = a[i]; } } for (int i = 0; i < n; i++) {//找到数组中最大值所对应的数组下标 if (a[i] == c) { c = i; } } if (b[c] == 0) {//等于0的情况就是数组中没有相同的数字 System.out.println(m[0]); } else { System.out.println(b[c]); } } } }