• 2017.10.7 计算机算法分析与设计------众数问题


    2.问题:
    给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重
    集S中重数最大的元素称为众数。
    例如,S={1,2,2,2,3,5}。
    多重集S的众数是2,其重数为3。

    先对集合中的元素从小到大排序,然后统计重数,最后找出出现次数最多重数及其对应的元素。

    实现步骤:
    ```
    1.开一个数组a[n],a[n]存放集合中的元素;
    2.sort(a,a+n)对元素从小到大排;
    3.对排序后的元素进行重数统计
    ```

    思路:
    1.以中间的数字为界限, 确定左右起始和终止界限。
    2.分割成2段数组。
    3.中间数与2段数组分别比较。若中<左,即最大众数可能存在左端,将左端再进行2段分割(递归)直到 中 > 左为止。右端同理。左右递归计算,取最值就是最终答案。
    ####//实现代码如下:

    #include“iostream”
    #include“algorithm”
    using namespace std;
    int main()
    {
    	int n,i,m=0,s,max=0,t,*a;
    	//m标记元素,s统计该元素重数,max标记出现的最大,t表示该重数对应的元素
    	scanf("%d",&n);
    	printf("请输入6个数字:");
    	a=new int[n];
    
    	for(i=0;i<n;i++)
    		scanf("%d",&a[i]);
    	sort(a,a+n);
    	for(i=0;i<n;i++)
    	{
    		if(m!=a[i])
    			s=1; 
    		else
    			s++;
    		m=a[i];
    		if(s>max)
    		{ 
    			t=m;
    			max=s;
    		}
    	}
    	printf("
    "); 
    	printf("众数是:%d
    重数是:%d
    ",t,max);
    	return 0;     
    }
    

      

  • 相关阅读:
    Vim学习指南
    frambuffer lcd.c
    工控显示界面
    ubuntu nfs 开发板
    java初学1
    使用多态来实现数据库之间的切换
    Space Shooter 太空射击
    CandyCrush 糖果传奇
    进制转换以及原码、反码、补码
    winform小知识
  • 原文地址:https://www.cnblogs.com/qichunlin/p/7635949.html
Copyright © 2020-2023  润新知