算法--众数问题

·问题描述: 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。
例如:S={1,2,2,2,3,5}。多重集S的众数是2,其重数是3.
算法设计: 对于给定的由n个自然数组成的多重集S,计算S的众数和重数。
数据输入: 输入数据由文件名为input.txt的文本文件提供。文件第一行为多重集S中元素的个数n;在接下来的n行中,每行有一个自然数。
结果输出: 将计算结果输出到文件output.txt。输出文件有两行,第一行是众数,第二行是重数。
输入:
6
1
2
2
2
3
5
输出:
2
3

代码:

#include<stdio.h> #include<stdlib.h> void Input(int a[],int n){ int i; for(i=0;i<n;i++){ scanf("%d",&a[i]); } } void Swap(int a[],int m,int n){ int temp;//暂存数据 int i=m; int j=n; temp = a[i]; a[i] = a[j]; a[j] = temp; } void Sort(int a[],int n){ for(int i=0;i<n-1;i++){ for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ Swap(a,j,j+1); } } } } void Mode(int a[],int n){ int mode;//设定众数 int flag=0;//判定是否是首位相等 int most=0;//记录众数次数 int count=1;//记录次数 //遍历数组寻找出现次数最多的数即为众数 for(int i=0;i<n;i++){ if(a[i+1]==a[i]&&flag==1){ count++; } else if(a[i+1]==a[i]&&flag==0){ flag = 1; count++; } else{ flag=0; if(count>most){ mode = a[i]; most = count; } } } //输出 printf("众数为:%d\n",mode); printf("众数出现的次数是:%d",most); } int main(){ //众数问题,先输入n个数,再对这n个数进行排序,再找出众数 int n; scanf("%d",&n); int a[n]; Input(a,n); //排序 Sort(a,n); //记录众数并输出,第一个参数为排好序的数组,第二个参数是数组长度 Mode(a,n); return 0; }

当时还是文件名还是cpp,如果报错就把int i挪出来就好了,c++里面能那么用,c还不行


有问题请私聊


__EOF__

本文作者坤舆小菜鸡
本文链接https://www.cnblogs.com/HBU-xuhaiyang/p/17223186.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   坤舆小菜鸡  阅读(76)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示