7-3 求整数序列中出现次数最多的数(15 分)
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入格式:
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出格式:
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
输入样例:
10 3 2 -1 5 3 4 3 0 3 2
输出样例:
3 4
我想到一个笨拙的办法,就是先从大到小排序,然后再一一比较
东拼西凑整合了这段代码,基本能满足你说的要求,有一个bug就是当遇到两个数的个数相同时,
输出的是首先出现的那个数,这个你可以仔细分析后完善一下。
#include <stdio.h>
void main()
{
int a[100] = {0};
int b[100] = {0};
int count[100] = {0};
int len = 0,max =0,n = 0;
int i =0,j = 0;
do
{
scanf("%d",&a[i]);
i++;
}while(getchar() != '\n');
n = i;
for(i=0;i<n;i++)
{
for(j=0;j<len;j++)
{
if(a[i]==b[j])
{
count[j]++;
break;
}
}
if(j==len)
{
b[len]=a[i];
count[len]=1;
len++;
}
}
for(j=1;j<len;j++)
if(count[j]>count[max])
max=j;
printf("max=%d,times=%d\n",b[max],count[max]);
}
#includeint main(){ static int M=0; int a1[30],a2[30],a3[30]={0},i=0,j=0,k,N,temp; do{ scanf("%d",&a1[i]); i++; }while(a1[i-1]!=-1); N=i; a2[0]=a1[0]; for(i=0;i<N-1;i++){ for(k=0;k<=M;k++){ if(a1[i]==a2[k]) break; else{ if(k==M){ a2[k+1]=a1[i]; M++; } } } } for(j=0;j<=M;j++){ for(i=0;i<N;i++){ if(a2[j]==a1[i]){ a3[j]++; } } } temp=0; for(i=0;i<=M;i++){ if(a3[temp]<a3[i]) temp=i; printf("%d--%d次\n",a2[i],a3[i]); } printf("\n出现次数最多的数为:%d\n该数出现了%d次",a2[temp],a3[temp]); printf("\n"); return 0;}
正确!