算法训练 出现次数最多的整数

    xiaoxiao2021-03-25  135

    题目:

      问题描述   编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。   输入格式:第一行是一个整数 NN £ 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]); } } } }

    转载请注明原文地址: https://ju.6miu.com/read-24792.html

    最新回复(0)