C语言111111111

输入一组数据,现在要你统计各个数据出现了多少次。

输入格式:
输入一组整数数据,数据的总数量sum(sum>=21),各个数据的值x(x<=20)。

输出格式:
输出sum值。
从小到大输出各个数据x(0<=x<=20)出现的次数,没有出现的输出0,输出格式为x出现的次数+空格。

输入样例:
在这里给出一组输入。例如:

1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
输出样例:
在这里给出相应的输出。例如:

21
0 3 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

各个数据值不大于20,那么就可以定义一个长度为21的整数数组,记录每个数出现的次数

#include <stdio.h>
int main()
{
    int a[21] = {0},n=0,m,i;
   char r;
    do
    {
        scanf("%d",&m);
        n++;
        a[m]++;
        r = getchar();
    }while(r != '\n');
    printf("%d\n",n);
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
}

这样写:

#include <stdio.h>

int main()
{
    int a[21]; 
    for (int i = 0; i < 21; i++)
        a[i] = 0;
    int num;
    while (scanf("%d", &num) != EOF) {
        a[num]++;
        if (getchar() == '\n')
            break;
    }

    int sum = 0;
    for (int i = 1; i <= 20; ++i)
        sum += a[i];

    printf("%d\n", sum);

    for (int i = 0; i < 21; i++) {
        if (i == 0)
            printf("%d", a[i]);
        else
            printf(" %d", a[i]);
    }
    return 0;
}