1) 第一种思路很简单,在全局定义一个大数组,所有元素初始为0,每输入一个数时,就在以这个数为数组下标的元素加一,最后输出结果。
参考代码如下:
#include <stdio.h>
int arr[1000000];
int main(void)
{
int n;
scanf("%d", &n);
int tmp;
int i;
for (i = 0; i < n; i++)
{
scanf("%d", &tmp);
arr[tmp]++;
}
for (i = 0; i < 1000000; i++)
{
if (arr[i] != 0)
{
printf("%d %d\n", i, arr[i]);
}
}
return 0;
}
2) 第二种方法就是比较直接的想法,将输入的所有数存放在一个数组中,先对数组进行从小打到排序,然后对该数组进行处理。
参考代码如下:
#include <stdio.h>
int main(void)
{
int n;
scanf("%d", &n);
int arr[n];
int i;
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
int j;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (arr[i] > arr[j])
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
//处理方式如下:
i = 0;
int tmp;
int num = 0;
while (i != n)
{
tmp = arr[i];
while (arr[i] == tmp)
{
num++;
i++;
}
printf("%d %d\n", tmp, num);
num = 0;
}
return 0;
}
出自我站“教你夺冠”,欢迎大家来撩。