c语言相关的数组问题

输入一组数字
存储在一维数组中,程序能统计输入数中一共有多少组相同的数,并删除相同的数,使剩下的
数中每个数字都不相同
将剩下的数按从小到大的顺序排列输出,同时输出所统计的相同数的组数以及输出数组中数据个数。

最好用devc++做,感激不尽!

  • 建立一个10个元素的整形数组,初始化全0
  • 把输入的数字根据下标判断,放入对应下标
  • 如果该下标位置已经有数字,不是0了
  • count++代表有1个重复的(0要单独判断)
  • 最后再用一边for循环看一共几个数字
#include <stdio.h>

int main()
{
    int arr[10] = { 0 };
    int x;
    int count0 = 0;//计算一共输入了几个0
    int count = 0;//计算一共有几个重复的数
    while (scanf("%d", &x) != EOF)
    {
        if (x == 0)
            count0++;
        else if (arr[x]!= 0)
            count++;
        else
            arr[x] = x;

        if (getchar() == '\n')
            break;//用回车来停止输入
    }
    int NUM = 0;//计算一共有几个数字
    if (count0 != 0)
    {
        NUM++;//count0不为0说明有0这个数字
        printf("%d ", 0);
        if(count0>1)//如果count0>1说明0也是重复的
            count++;
    }
    for (int i = 1; i < 10; i++)
    {
        if (arr[i] != 0)//从1开始,只有不为0的数字才需要输出
        {
            NUM++;//总数+1
            printf("%d ", arr[i]);
        }
    }
    printf("\n");
    printf("一共有%d个数字,重复的有%d个\n", NUM, count);
    
    return 0;
}

结果如下

img

如果对你有帮助,还请点个采纳,万分感谢!

#include <stdio.h>

int main()
{
    int a[10] = { 0 };
    while (1)
    {
        int n; scanf("%d", &n);
        char s = getchar();
        if (s == '\n')
        {
            break;
        }
        a[n]++;
    }
    int count = 0;
    for (int i = 0; i < 10; i++)
    {
        if (a[i] != 0)
        {
            printf("%d : %d\n", i, a[i]);
            count++;
        }
    }
    printf("%d\n", count);
    return 0;
}

img

数据范围能给一下吗