第一题
·输入一些数值,求出现的次数最多的数。
如果有多个并列,则从大到小输出。
#include<stdio.h>
int main() {
int a[100];
static int r[100];//存放当前找到的出现次数最多的数
static int b[100];// 表示和a[i]相等的个数
int n , h = 0, i = 0;//h表示出现次数最多数的数量减一,n表示输入的数的数量
int max = 0;
char s;
for (int k = 0; k < 100&&s!='\n'; k++)//输入
{
scanf("%d", &a[k]);
s=getchar();
n++;
}
for (int k = 0; k < n - 1; k++)
{
for (int j = k + 1; j < n; j++)
{
if (a[k] == a[j])//计数相等数的数量
{
b[k]++;
}
}
if (b[k] > max)//当找到新的出现最多次数的数时
{
h = 0;//清零原来记录
max = b[k];
r[0] = a[k];
}
else if (b[k] == max && max != 0)//当出现最多次数的数有多个时
{
h = h + 1;
r[h] = a[k];
}
}
if(max==0)//当所有数只出现一次的情况
{
for (int k = 0; k < n-1 ; k++)//排序大小 ,选择排序法
{
for (int j = k; j < n; j++)
{
if(r[k]<r[j])
{
int maxgain;
maxgain=r[j];
r[j]=r[k];
r[k]=maxgain;
}
}
}
for (int j = 0; j < n; j++)//输出
{
printf("%d ",a[j]);
}
return 0;
}
if (h == 0)//最多次数的数只有一个时
printf("%d", r[h]);//输出
if (h > 0)//最多次数的数有多个时的情况
{
for (int k = 0; k < h ; k++)
{
for (int j = k; j < h+1; j++)
{
if(r[k]<r[j])
{
int maxgain;
maxgain=r[j];
r[j]=r[k];
r[k]=maxgain;
}
}
}
for (int j = 0; j < h+1; j++) //输出
{
printf("%d ",r[j]);
}
}
return 0;
}
结果如下
输入 55 44 44 55 69 54
输入1 2 3 5 6 4 8 7
我这方法比较复杂,如果先对数进行排序在找出现次数代码会少很多,这里我就不改正了,自行体会吧