首页 > 试题广场 >

众数

[编程题]众数
  • 热度指数:7061 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入20个数,每个数都在1-10之间,求1-10中的众数(众数就是出现次数最多的数,如果存在一样多次数的众数,则输出权值较小的那一个)。

输入描述:
测试数据有多组,每组输入20个1-10之间的数。


输出描述:
对于每组输入,请输出1-10中的众数。
示例1

输入

5 1 5 10 3 5 3 4 8 6 8 3 6 5 10 7 10 2 6 2 

输出

5
 /**  * 众数处理函数  * @param arrayList 多重集S  */ public static void showFun(ArrayList arrayList) {
    Collections.sort(arrayList); //数组排序  int max = 1;//最大次数  Map map = new HashMap(); //存放:当有多个数出现次数相等时的数  for ( int i = 0; i < arrayList.size()-1; i++ ) { int count = 1;  for ( int j = i + 1; j < arrayList.size() && arrayList.get(i) == arrayList.get(j); j++ ) { //如果当前数等于上一个数  count++;  } if ( count > max ) { //当前次数为最大时,更新最大次数 并保存值  max = count;  map.put(arrayList.get(i), count);  } if ( count == max ) { //当前次数==之前的次数时,保存值  map.put(arrayList.get(i), count);  }
    }

    ArrayList arr=new ArrayList(); //存放最大值相同是的key值,也就是数  for ( Object key : map.keySet() ) { //获得key  if ( max == (int) map.get(key) ) { //获得value 如果value==最大次数 则输出  arr.add(key) ;  }
    }
    Collections.sort(arr);//排序 如果存在一样多次数的众数,则输出权值最小的那一个  System.out.println((int)arr.get(0)); }

发表于 2016-10-06 09:13:19 回复(1)
更多回答
import java.util.*;
public class Main{
    public static void main(String[] args){
        final int CONSTANT = 20;
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int[] arr = new int[CONSTANT];
            for(int i =0;i<CONSTANT;i++){
                arr[i] = sc.nextInt();
            }
            Map<Integer,Integer> map = new HashMap<>(CONSTANT);
            for(Integer i:arr){
                if(map.containsKey(i)){
                    Integer old = map.get(i);
                    map.put(i,old+1);
                }else{
                    map.put(i,1);
                }
            }
             Arrays.sort(arr);
             Integer maxKey = arr[0];
             Integer maxValue = map.get(maxKey);
            for(Map.Entry<Integer,Integer> entry : map.entrySet()){
                if(maxValue.intValue() < entry.getValue().intValue()){
                    maxKey = entry.getKey();
                    maxValue = entry.getValue();
                }
            }
            System.out.println(maxKey);
        }
    }
}
发表于 2018-08-03 01:01:17 回复(0)
#include<iostream>
using namespace std;
int main()
{
    int a[10] = { 0 }, n, max,max_n;//max表示出现最多的次数,max_n表示对应的数组下标
    for (int i = 0; i < 20; i++)
    {
        cin >> n;
        a[n]++;//n出现一次,则将a[n]自增1
    }
    max = a[0];
    max_n = 0;
    for (int i = 0; i < 10; i++)
    {
        if (a[i] > max)//寻找出现次数最多的
        {
            max = a[i];
            max_n = i;
        }
    }
    cout << max_n << endl;
    return 0;
}

发表于 2018-07-05 15:59:06 回复(1)

练习一下map

#include <iostream>
#include <map>
#include <cctype>
using namespace std;
int main()
{
    int i,tmp;
    map<int,int> mode;
    for(i=0;i<20;i++)
    {
        cin >> tmp;
        auto it=mode.find(tmp);
        if(it==mode.end())
            mode[tmp]=1;
        else 
            mode[tmp]++;
    }
    auto it=mode.begin();
    auto ans=it;
    for(it++;it!=mode.end();it++)
        if(it->second>ans->second)
            ans=it;
    cout << ans->first << endl;
    return 0;
}
发表于 2019-04-13 10:04:59 回复(0)
#include<stdio.h>
int main (){//the shorter,the better.
    int i,t;
    for(;~scanf("%d",&t);){
       int h[11]={0};
       for (++h[t],i = 0; i < 19&&~scanf("%d",&t);++h[t],i++);
       for (t=i=1; i<11||(printf("%d\n",t),0);t=h[t]>=h[i]?t:i,i++);
    }
}

发表于 2018-01-14 14:19:18 回复(0)
#include<stdio.h>
int main()
{
    int i,j,a[20],b[10]={1,2,3,4,5,6,7,8,9,10},num[10]={0};
    for(i=0;i<20;i++)
    {
         scanf("%d",&a[i]);//输入
        for(j=0;j<10;j++)//判断是哪个数
        {
            if(a[i]==b[j])
                num[j]++;//个数累加
        }
    }
    int max=num[0],maxindex=0;//找最多值
    for(i=0;i<10;i++)
        if(num[i]>max)
        {
            max=num[i];maxindex=i;
        }
    printf("%d\n",maxindex+1);//加一是因为下标从0开始,也可以直接输出b[maxindex]
}

发表于 2020-04-08 11:07:56 回复(0)
Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] record= new int[11];
        while (scanner.hasNext()) record[scanner.nextInt()]++;
        int max = 0;
        int index =0;
        for (int i = 1; i <=10 ; i++) {
            if (record[i]>max){
                index=i;
                max=record[i];
            }
        }
        System.out.println(index);
    }
}


发表于 2020-03-19 22:50:07 回复(0)
//注意记得sum的初始化,另外bits/stdc++.h真的好神奇一个头文件
#include<bits/stdc++.h>
using namespace std;
int main() {
	int a[20];
	while (cin >> a[0]) {
		int sum[10] = { 0 };
		sum[a[0]]++;
		for (int i = 1; i<20; i++) {
			cin >> a[i];
			sum[a[i]]++;
		}
		int max = 0, pos = 0;
		for (int i = 0; i<10; i++)
			if (sum[i]>max)
				max = sum[i], pos = i;
		cout << pos << endl;
	}
}

发表于 2020-01-12 22:41:13 回复(0)
hash散列
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int ans = 0;   //记录众数
    int hash[11];   //记录每个数出现的次数
    memset(hash,0,sizeof(hash));   //全部初始化为0
    for(int i = 0; i < 20; i++)
    {
        int temp;
        cin >> temp;
        hash[temp]++;
        ans = max(ans,hash[temp]);
    }
    for(int i = 1; i <= 10; i++)
    {
        if(hash[i] == ans)
        {
            cout << i << endl;
            break;
        }
    }
    return 0;
}

发表于 2018-12-29 14:11:32 回复(0)
import java.util.Scanner; public class Main { public static void main(String[] args) { int [] arr=new int[11]; int max; Scanner in=new Scanner(System.in); while (in.hasNext())
        { for(int i=0;i<=10;i++)
                arr[i]=0;
            max=arr[0]; for(int i=0;i<20;i++)
                arr[in.nextInt()]++; for(int i=1;i<=10;i++)
            { if(arr[i]>max)
                    max=i;
            }
            System.out.println(max);
        }
    }
}

发表于 2016-10-24 19:01:42 回复(0)

python只需要一行就可以通过:

from collections import Counter
while True:
    try:
        print(Counter(map(int,input().split())).most_common(1)[0][0])
    except:
        break

人生苦短,我用python可以***

发表于 2017-10-03 18:00:56 回复(4)
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()) {
			
			Map<Integer , Integer> myMap = new TreeMap<Integer, Integer>();
			
			for(int i = 0;i < 20;i++) {
				int n = scanner.nextInt();
				if (myMap.containsKey(n)) {
					myMap.put(n, myMap.get(n) + 1);
				}else {
					myMap.put(n, 1);
				}
			}
			
			int max = Integer.MIN_VALUE;
			
			for(Map.Entry<Integer , Integer> entry : myMap.entrySet()) {
				max = Math.max(max, entry.getValue());
			}
			
			for(Map.Entry<Integer, Integer> entry : myMap.entrySet()) {
				if (entry.getValue() == max) {
					System.out.println(entry.getKey());
					break;
				}
			}
		}
	}
}

发表于 2024-03-24 20:00:06 回复(0)
#include<stdio.h>
int count[11]={0};

int main(){
    int tmp;
    while(scanf("%d",&tmp)!=EOF){
        count[tmp]++;
    }
    int index =1;
    for(int i=1;i<=10;i++){
        if(count[index]<count[i])
        index = i;
    }
    printf("%d",index);
}

发表于 2024-03-16 20:00:24 回复(0)
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int>count(11);   //统计1——10每个数出现次数
    for (int i = 0; i < 20; i++) {
        int num;
        cin >> num;
        count[num]++;
    }
    int max_count = 0,  //count最大值
        mode;           //众数
    for (int i = 1; i <= 10; i++) {
        if (max_count < count[i]) {
            max_count = count[i];
            mode = i;
        }
    }
    cout << mode << endl;
    return 0;
}

编辑于 2024-02-02 11:30:38 回复(0)
使用map[key]++来记录key出现的次数,并排序
#include <cstdio>
#include <map>
using namespace std;

int main(){
    int arr[21];
    while(scanf("%d",&arr[1]) != EOF){
        for(int i = 2; i <= 20; ++i){
            scanf("%d",&arr[i]);
        }
        map<int,int> mymap;
        for(int i = 1; i <= 20; ++i){
            mymap[arr[i]]++;  //核心
        }

        int max_first = 0, max_second = 0;
        map<int,int>::iterator it;
        for(it=mymap.begin();it!=mymap.end();++it){
            // printf("%d %d\n",it->first,it->second);
            if(it->second > max_second){
                max_first = it->first;
                max_second = it->second;
            }
        }
        printf("%d\n",max_first);
    }
    return 0;
}


发表于 2023-03-30 19:16:16 回复(0)
#include <iostream>
#include <cstring>
using namespace std;

int main() {
    int a[12],temp;
    while(cin>>temp){//输入一个数
        memset(a,0,sizeof(a));//初始化
        a[temp]++;
        for(int i=0;i<19;i++){//输入之后19个数
            cin>>temp;
            a[temp]++;
        }

        int max=1;//max用于保存众数的位置
        for(int i=1;i<=10;i++){
            if(a[i]>a[max]){
                max=i;
            }
        }

        cout<<max<<endl;
    }
}

发表于 2023-03-25 14:24:46 回复(0)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Map<Integer, Integer>  digitMap = new HashMap<Integer, Integer>();
        List<Integer> digitList = new ArrayList<Integer>();
        for (int i = 0; i < 20; i++) {
            int digit = scanner.nextInt();
            if (digitMap.get(digit) == null) {
                digitMap.put(digit, 1);
            } else {
                digitMap.put(digit, digitMap.get(digit) + 1);
            }
        }
        // 排序
        for (Integer key : digitMap.keySet()) {
            if (!digitList.contains(digitMap.get(key))) {
                digitList.add(digitMap.get(key));
            }
        }
        Object[] digitArray = digitList.toArray();
        Arrays.sort(digitArray);
        int max = (int)digitArray[digitList.size() - 1];
        for (Integer key : digitMap.keySet()) {
            if (digitMap.get(key) == max) {
                System.out.println(key);
                break;
            }
        }
    }
}

发表于 2023-03-25 14:13:58 回复(0)
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    while (cin >> n){
        vector<int> nums(11);
        ++nums[n];
        for (int i = 0; i < 19; ++i){
            cin >> n;
            ++nums[n];
        }
        n = 1;
        for (int i = 1; i <= 10; ++i)
            if (nums[i] > nums[n])
                n = i;
        cout << n << endl;
    }
}
发表于 2023-03-12 21:47:06 回复(0)
#include <stdio.h>

int main() {
    int num;
    int mark = 1;
    int i;
    int arr[11] = {0};
    while (scanf("%d", &num) != EOF) {
        arr[num]++;
    }

    for (i = 1; i <= 10; i++) {
        //printf("%-4d ", arr[i]);
        if(arr[i]>arr[mark]){
            mark = i;
        }
    }

    printf("%d",mark);

    return 0;
}

发表于 2023-03-12 20:32:53 回复(0)
#include <stdio.h>

int main() {
    int a[11] = {0}, x, k;
    for (int i = 0; i < 20; i ++) {
        scanf("%d", &x);
        a[x]++;
    }
    k = 10;
    for (int i = 9; i >= 1; i --) {
        if (a[i]>=a[k]) {
            k = i;
        }
    }
    printf("%d", k);
    return 0;
}

发表于 2023-03-12 16:24:17 回复(0)