最高频率利用数组

43 最高频率

作者: 朱凯时间限制: 10S章节: 一维数组

问题描述 :

明明的爸爸是一位著名的数学家。他在明明很小的时候就发现明明有过人的数学天赋,因此有意培养他对数学的兴趣。一次,明明的爸爸和明明玩起了一个数字游戏,这个游戏的名字叫“最高频率”。在游戏中,明明的爸爸要求明明在一串数字中,找出出现次数最多的那个数字,如果有多个数字出现的次数一样,则取最小的那个数字。明明很快就理解的游戏的规则,开始玩起来。明明的爸爸首先给了明明三个数字:3、2、1;明明很快就回答说:“1”(虽然3、2都出现一次,但是1是最小的数字,因此答案是1)。明明的爸爸很惊讶于明明的反应速度,开始加大游戏的难度,给出了由6个数字组成的数字串:2、1、3、4、5、2;明明眼珠子一转,脱口而出:“2”。明明的爸爸意识到简单的数字串很难难住明明,于是决定给出很长的一串字符串来考明明。但与此同时,明明爸爸面对这很长的数字串,也无法一时就统计出哪个数字出现的次数最高。于是就求助于你,让你帮他写一个程序,用来计算出出现次数最多的那个数字。 明明的爸爸的问题可以归结为:给你一个数字串,里面有n个数字,输出这个数字串中出现次数最多的那个数字;如果有多个数字出现次数一样,则输出其中最小的那个数字。

输入说明 :

你写的程序需要从标准输入设备(通常为键盘)中读入多组测试数据,每组测试数据仅占一行,每行开始有一个正整数n(1 ≤ n ≤ 200),表示数字串中有n个数字;之后有n个数字,表示数字串中的n个数,其中每个数都大于等于1且小于等于109;每个数字之间用一个空格隔开。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。

输出说明 :

对于每一组测试数据,你写的程序需要计算出一组相应的运算结果,并将每组运算结果依次写入到标准输出设备(通常为启动该程序的文本终端,例如Windows中的命令行终端)中。每组运算结果为一个整数,即这个数字串中出现次数最多的那个数字;如果有多个数字出现次数一样,则输出其中最小的那个数字。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。

输入范例 :

1 100
5 5 3 77 23 10

输出范例 :

100
3

1.利用数组,其中a[110]用来记录出现的次数,巧妙的是序号数刚好是那个值,而a[序号数]记录的就是出现次数,刚开始没想到这一点
2 当次数相同时,取得是最小的值,而for循环的i对应的刚好是输入的数,应该肯定本省就是从小到大出现,直接输出序号值就行


#include <stdio.h>
#include <math.h>

int main()
{
	int n;
	while(~scanf("%d",&n))
	{
	    int num,a[110]={0};
		for(int i=0;i<n;i++){
            scanf("%d",&num);
            a[num]++;
		}
		int max=0,t;
		for(int i=1;i<110;i++){
            if(a[i]>max){
                max=a[i];
                t=i;
            }
		}
		printf("%d\n",t);
	}

}

单独还考虑一下最小值:

#include <stdio.h>
#include <math.h>

int main()
{
	int n;
	while(~scanf("%d",&n))
	{
	    int num,a[110]={0};
		for(int i=0;i<n;i++){
            scanf("%d",&num);
            a[num]++;
		}
		int max=0,t;
		for(int i=1;i<110;i++){
            if(a[i]>max){
                max=a[i];
                //t=i;
            }
		}
    
    for(int i=1;i<110;i++){
       if(max==a[i]&&min>i){
           min=i;
      }
	}
   printf("%d",min);
	//	printf("%d\n",t);
	}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值