用c语言编程:输入一些数值,求出现的次数最多的数。如果有多个并列,则从大到小输出。
时间: 2024-03-07 19:46:51 浏览: 14
好的,下面是用 C 语言编写的代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, j, max = 0, cnt = 0, k = 0;
int *a, *b;
printf("请输入数字个数:");
scanf("%d", &n);
a = (int *)malloc(n * sizeof(int));
b = (int *)calloc(1000, sizeof(int)); // 用一个桶来记录每个数字出现的次数
printf("请输入数字:\n");
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
b[a[i]]++;
}
for (i = 0; i < n; i++)
{
if (b[a[i]] > max)
max = b[a[i]];
}
for (i = max; i >= 0; i--)
{
for (j = 0; j < 1000; j++)
{
if (b[j] == i)
{
cnt++;
if (cnt == 1)
k = j;
else if (cnt == 2)
printf("%d ", k);
printf("%d ", j);
}
}
}
free(a);
free(b);
return 0;
}
```
代码思路如下:
1. 用 `malloc` 动态分配数组 `a`,用 `calloc` 动态分配数组 `b`,`b` 用来记录每个数字出现的次数。
2. 依次输入数字并在 `b` 中记录数字出现的次数。
3. 扫描一遍 `b`,找出出现次数最多的数字出现的次数。
4. 从最大出现次数开始扫描 `b`,找出出现次数等于该数字的数字,并按照要求输出。
5. 最后释放动态分配的数组。
注意:代码中使用了 `calloc` 函数,它会自动将分配的内存初始化为 0。