需要帮助,请排除阵列中的某些物品

时间:2019-06-09 04:53:09

标签: c++ arrays sorting

我需要输出按利润递增顺序(从最低利润到最高利润)来赚钱的摊位(如果他们赚了钱)。当我运行程序时,它以升序输出,但仅排除一个<0的利润实例,并输出其余实例。我在做什么错了?

下面是我用来排除获利<0的摊位的代码

n

1 个答案:

答案 0 :(得分:1)

我的答案不是完整答案,但是我在代码上找到了主要问题。

# Remove negative items
for (int i = 0; i < n; i++)
{
    if (Stalls[i].net < 0)
    {
        printf(" i = %d, %d\n", i, Stalls[i].net);
        for (int j = i + 1; j < n; ++j)
        {
            // strcpy(Stalls[j - 1].name, Stalls[j].name);
            // Stalls[j - 1].net = Stalls[j].net;
            Stalls[j - 1] = Stalls[j];
        }
        n--;
    }
}

此功能有问题

如果data[-3, -2, -1, 0, 1, 2]
经过上述for循环后,data[-2, 0, 1, 2, 2, 2]
但是,我们可以认为data[0, 1, 2, 2, 2, 2]

原因:
-3 -2 -1 0 1 2

-3的索引为0,
对于Stalls[j - 1] = Stalls[j];-3-2取代,
-2移至第0位,

但是,-2无法与if (Stalls[i].net < 0)进行检查,因为i已经增加了

所以-2仍然存在

容易回答:(未优化)

// Remove negative items
for (int k = 0; k < n; k++) // This is added loop
    for (int i = 0; i < n; i++)
    {
        if (Stalls[i].net < 0)
        {
            printf(" i = %d, %d\n", i, Stalls[i].net);
            for (int j = i + 1; j < n; ++j)
            {
                // strcpy(Stalls[j - 1].name, Stalls[j].name);
                // Stalls[j - 1].net = Stalls[j].net;
                Stalls[j - 1] = Stalls[j];
            }
            n--;
        }
    }