Hzu挑战自我


私信TA

用户名:gxhzxyjsj

访问量:98836

签 名:

2024终究会过去,期待2025!

等  级
排  名 8
经  验 27865
参赛次数 67
文章发表 157
年  龄 0
在职情况 教师
学  校 贺州学院
专  业 软件工程

  自我简介:

弱鸡一个,继续努力!

解题思路:与1558类似。

  1. 每种众数都对应有其重数,所以可定义一个结构体:包含众数和对应的重数。在程序中输入自然数,然后与结构体数组(众数表)中的众数比较是否有相应的众数,如果有,则重数加1,如果没有,则把输入的颜色加到众数表中,并设置重数为1。

  2. 选出重数最多的,然后存放到另一个数组中,再按众数排序找到最小即可输出。


    参考代码:

#include<bits/stdc++.h>
using namespace std;
typedef struct  
{
	int num;     //众数 
	int count;   //众数num的重数
}Number;
Number a[50000],b[50000];
int cmp(Number a,Number b)
{
	return (a.num<b.num);
}
int main()
{
	int i,j,n,x,k=0;
	int max=1; 
	cin>>n;
	while(n--)
	{
		cin>>x;
		for(i=0;i<k;i++)  //在众数数组中查找有没有x 
		{
			if(x==a[i].num)  //找到,则重数加1 
			{
				a[i].count++;
				if(max<a[i].count) 
					max=a[i].count;
				break;
			}			
		}
		if(i==k)  //没有找到把x作为新的众数放到数组中,同时设置重数为1 
		{
			a[k].num=x;
			a[k].count=1;
			k++;    //众数个数加1			
		}	
	}
	for(i=0,j=0;i<k;i++)  //把重数最大的找出来,并保存到数组b中 
	{
		if(a[i].count==max)
		{
			b[j].num=a[i].num;
			b[j].count=a[i].count;
			j++;
		}			
	}
	sort(b,b+j,cmp);  // 排序 
	cout<<b[0].num<<endl;   //输出最大重数对应的最小众数
	cout<<b[0].count<<endl;
    return 0;
}


 

0.0分

2 人评分

  评论区

  • «
  • »