C++ 输入N个数 找出出现次数最多的

比如输入 1 2 3 3 6 5 4 出现 3
2024-11-28 14:55:59
推荐回答(4个)
回答1:

#include
using namespace std;

int main()
{
int N;
cout <<"请输入N:\n";
cin>>N;
int*a=new int[N];//统计20个数种出现次数最多的数
int*b=new int[N];
int *c=new int[N];
memset(b,0,N);
memset(c,0,N);
cout <<"输入"<for(int i=0;icin>>a[i];
}
for(int i=0;ifor(int j=0;jif(a[j]>a[j+1])swap(a[j],a[j+1]);
}
}
int h=1,j=0;
b[0]=a[0];
c[0]++;
while(hif(a[h]!=a[h-1]){
j++;
b[j]=a[h];//将a中不同的数存储到b中
c[j]++;//用c中对应位置的数记录b中每个数的个数
}
else {
c[j]++;
}
h++;
}
int value=0;
int num=0;
for(int i=0;iif(valuevalue=c[i];
num=i;
}
}
cout <<"出现次数最多的数是:"<cout <<"出现了"<delete []a;
delete []b;
delete []c;
return 0;
}

回答2:

如果那N个数都是大于等于0的且N不是太大并已知,完全的可以用int array[N]一个数组完成任务。

下面是伪代码:

初始化数组array。
repeat(直到取完N个数)
{
取得一个输入的数给变量i;
array[i] = array[i] + 1;
}

遍历数组,找出最大的值,即出现最多的次数。

上面给出的是一个特例,对于一般性的情况,前面几位回答者已经给出了解。

回答3:

指针指向一维数组,输入m个正整数,统计输出现最多的数,和出现次数
#include "stdio.h"
#include "conio.h"
int main()
{
static int m,a[100]={0},n[100],*p,*q;
printf("input m:");
scanf("%d",&m);
for(p=a;pscanf("%d",p);
getchar();
for(p=a;pn[*p]++;
q=p=n;
p++;
while (p{
if(*p>*q)
q=p;
p++;
}
printf("%d %d \n",q-n,*q);
getch();
return 0;
}

回答4:

先排序,再找次数最多的

#include
using namespace std;
int number[50];
int cmp(const void *a,const void *b)
{
return *(int*)a - *(int*)b;
}
int main()
{
int n;
int i;
int max;
int maxOccurTime;
int occurTime;
cin>>n;
for(i = 0; i < n; i++)
{
cin>>number[i];
}
qsort(number,n,sizeof(int),cmp);
max = number[0];
maxOccurTime = 1;
occurTime = 1;
for(i = 1; i < n; i++)
{
if(number[i] == number[i-1])
{
occurTime++;
}
else
{
occurTime = 1;
}
if(occurTime > maxOccurTime)
{
max!=number[i]? max=number[i]:1;
maxOccurTime = occurTime;
}
}
cout<<"出现次数最多的数字是: "< cout<<"出现次数为: "<
return 0;
}