数组内消去相同的数

来源:百度知道 编辑:UC知道 时间:2024/06/22 07:26:10
例如1,2,2,2,3,4,5,5,只保留1,2,3,4,5,
请用c解答
【问题描述】:
输入一个数n(n<=200000)和n个自然数(每个数都不超过1.5*10^9),请统计出这些自然数各自出现的次数,按顺序从小到大输出。输入数据保证不相同的数不超过10000个。
【样例输入】:
8
2
4
2
4
5
100
2
100
【样例输出】:
2 3
4 2
5 1
100 2

#include <stdio.h>
#include <stdlib.h>
int arr[200000] = {0};

int cmp(const void* a, const void* b)
{
return *(const int*)a - *(const int*)b;
}
int main(void)
{
int n, i;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", arr + i);
qsort(arr, n, sizeof(int), cmp);
for(i = 0; i < n; )
{
int val = arr[i], cnt = 1;
while(val == arr[++i])
cnt++;
printf("%d %d\n", val, cnt);
}
return 0;
}

非常之雷的方法:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

void main()
{
int i, num, val, cnt[200000];

printf("Input number:");
while (1 != scanf("%d", &num))
{
printf("Error format, try again!\n");
fflush(stdin);
}
if (num < 1 || num