CCF出现次数最多的数(100分)

题目描述

       给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
       第一行输入n(n<=1000),第二行输入n个数(每个数<=10000),相邻的数用空格分隔。

思路分析

       a作为输入的数组,对a进行遍历。a中的值存储在b,c数组的地址下标,每个值出现的次数存储在b,c数组的内容值。
       对c数组(工具数组)排序,求出最大次数max。
       对数组b进行遍历,如果等于max,则输出其下标。
       break,遇到第一个次数最大值就暂停。确保有多个次数最多的数时,输出的是最小的那个。

数组a:

12135
01234

数组b:

021101
012345

数组c:

021101
012345

实现代码

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

int main()
{
	int n;
	int a[1000]={};       // n(输入个数)最的大值 
	int b[10000]={};      //输入的n个数的值的最大值 
	int c[10000]={};      //工具数组,下面用来求次数最大值 
	while(scanf("%d",&n)!=EOF)
	{
		for(int i=0;i<n;++i)
		{
			scanf("%d",&a[i]);
			b[a[i]]++;       //地址下标表示数。内容值表示出现次数 
			c[a[i]]++;       //同上 
		}
		sort(c,c+10000);     //对工具数组c进行排序 
		int max=c[9999];     //得出次数最大值 max 
		for(int i=0;i<10000;++i){
			if(b[i]==max){   //对b数组进行遍历,如果 内容值=max 其地址值即为所求 
				printf("%d\n",i);
				break;       //在求得第一个出现次数最多的数后,停止 
			}
		}	
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值