众数问题

题目要求:
在一个包含n个元素的多重集合S中,每个元素在S中出现的次数称为该元素的重数,多重集合S中重数最大的元素称为众数
举例来说,多重集合S={1,2,3,3,3,3,4,4,5},则多重集合S的众数是3,元素3的重数为4
现要求对随机生成的由n个自然数组成的多重集合S,编程计算S的众数及其重数

主要思路:
先生成含有N个元素的随机数组,定义两个数组,一个用来存放数组元素,一个用来存放各元素的个数,找出个数最大的下标对应的数组元素。

第一步是调用随机数生成数组,这里我为了方便,将随机数的生成范围取为10以内,后面可以更改。

第二步是计算每个元素的个数,为了后续在找出众数时,不会重复,我把每个元素的个数定位从自己往后的计数,这样,如果出现了多次3,最多的个数是最前面的,后面的会依次少1。

第三步是通过一次循环,找出个数值最大的,这里找出的是第一次的最大,就是说如果数字2出现4次,数字5出现4次,这里找出的是数字2对应的4。

第四步是找出所有个数值都是最大值的元素。例如上面的例子,这次就会找出个数值也为4的数字5.

#include<iostream>
#include<iomanip>
#include<time.h>
using namespace std; //随机数函数头文件
void print(int arr[], int n)
{  
    for(int j=0;j<n;j++)
	{  
      cout<<arr[j]<<'\t';  
     }  
    cout<<endl;  
}  
int main() 
{
	int N;
    cout<<"请输入随机生成的整数序列的数字个数:";
    cin>>N;
    int a[1000],b[1000];
    srand(time(0)); //调用随机数
    for(int k=0;k<N;k++)
	{
      a[k]=1+rand()%10; //随机数的使用方法
	}
    cout<<"随机生成的数组为:\n";
    print(a,N);
	
	for(int m=0;m<N;m++)//每个元素的个数清零
	{
		b[m]=0;
	}

    for(int n=0;n<N;n++)//记录每个元素从自己(包含自己)往右的个数
	{
	  for(int j=n;j<N;j++)
	  {
	    if(a[n]==a[j])
		b[n]++;
	  }	
	}
	//print(b,N);
	int same,max=-1;
	for(int i=0;i<n;i++)
	{
		if(b[i]>max)
		{
			max=b[i];
			same=a[i];
		}
	}
	//cout<<same<<" "<<max<<'\n';
    cout<<"集合的众数是:";
	for(int s=0;s<n;s++)
	{
		if(b[s]==max)
			cout<<a[s]<<" ";
	}
	cout<<"该众数的重数是"<<max<<'\n';
	
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值