Нужна помощь в исключении определенных вещей из моего массива - PullRequest
0 голосов
/ 09 июня 2019

Мне нужно выводить киоски, которые приносили прибыль (если они приносили прибыль) в порядке увеличения прибыли (от минимальной прибыли к наибольшей прибыли). Когда я запускаю свою программу, она выводит ее в порядке возрастания, но исключает только один случай получения прибыли, который составляет <0, и выводит остальную часть. Что я делаю не так? </p>

Ниже приведен код, который я использую для исключения киосков, которые получили прибыль <0 </p>

    for (int i = 0; i < n; i++){
        if (Stalls[i].net < 0){
            for (int j = i + 1; j < n; ++j){
            Stalls[j - 1] = Stalls[j];}
            n--;}

}

    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (Stalls[i].net > Stalls[j].net) {
                Stall tmp = Stalls[i];
                Stalls[i] = Stalls[j];
                Stalls[j] = tmp;
            }
        }
    }
    for (int i = 0; i < n; i++)
        of << Stalls[i].name << endl;

1 Ответ

1 голос
/ 09 июня 2019

Мой ответ не полный, но я нашел основную проблему в коде.

# 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--;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...