整数正在重复?

时间:2014-02-24 22:11:00

标签: c sorting

我正在编写一个从键盘输入中读取整数的程序,然后找到该事件,然后按降序对它们进行排序。 我得到了发生和下降但是当我输入相同的整数时,如果我输入8 7 8则重复它们 它就像 8 2 2 8 2 2 7 1 请帮忙?? 这是我的代码

#pragma warning (disable :4996)
#include <stdio.h>
#include <stdlib.h>


int main(){

    int input;
    int inputarr[50], count[50] = {0};
    int i=0, j;
    int last = 0;

    printf("Enter numbers \n");


    ///getting int
    while (scanf("%d", &input) > 0)
    {
        inputarr[i] = input;
        i++;
    }

        last = i;

        printf("  N       Count\n");
        printf("-----     -----\n");
        int a;

        /// increment count
        for (i = 0; i < last; i++){
            count[inputarr[i]] = count[inputarr[i]] + 1;
        }

        /////ascending
        for (i = 0; i < last; i++)
        {
            for (j = 0; j < last; j++){
                if (inputarr[j]<inputarr[j + 1])
                {
                    int temp = inputarr[j];
                    inputarr[j] = inputarr[j + 1];
                    inputarr[j + 1] = temp;
                }
            }
            printf(" %d           %d\n", inputarr[i], count[inputarr[i]]);
        }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

此代码的问题在于您正在对数组进行排序时打印它。输入数字1 2 3 4将导致数字2 1 4 1 2 1 1 1被输出。要完成您想要的操作,您应该将打印部件移出分拣循环。即使这样,当数字在输入中多次出现时,输出也不会仅包含一次(例如,8 7 8 - > 8 2 8 2 7 2)。要做到这一点,如果它与您输出的前一个数字相同,则不应输出该数字。

另一件事,在排序循环中,您可能会访问

行中的非现有数组元素
for (j = 0; j < last; j++){

当j = last-1时,您正在访问可能不存在的最后一个元素。

解决所有这些问题之后,代码可能如下所示:

    for (i = 0; i < last; i++)
    {
        for (j = 0; j < last-1; j++){
            if (inputarr[j]<inputarr[j + 1])
            {
                int temp = inputarr[j];
                inputarr[j] = inputarr[j + 1];
                inputarr[j + 1] = temp;
            }
        }
    }
    if (last == 0)
        return 0;
    printf(" %d           %d\n", inputarr[0], count[inputarr[0]]);
    for(i = 1; i < last; i++)
        if (inputarr[i] != inputarr[i-1])
            printf(" %d           %d\n", inputarr[i], count[inputarr[i]]);