Задать вопрос

Почему выводятся невразумительные числа?

Здравствуйте. Решая задачу, столкнулся c тем, что вместо чисел 1 и 2 программа выводит какой-то мусор. В чём может быть проблема?
Задача
Люди стоят в очереди, но никогда не уходят из её начала, зато могут приходить в конец и уходить оттуда. Более того, иногда некоторые люди могут прекращать и начинать беспокоиться из-за того, что очередь не продвигается.

Реализуйте обработку следующих операций над очередью:

WORRY i: пометить i-го человека с начала очереди (в нумерации с 0) как беспокоящегося;
QUIET i: пометить i-го человека как успокоившегося;
COME k: добавить k спокойных человек в конец очереди;
COME -k: убрать k человек из конца очереди;
WORRY_COUNT: узнать количество беспокоящихся людей в очереди.
Изначально очередь пуста.

Формат ввода
Количество операций Q, затем описания операций.

Для каждой операции WORRY i и QUIET i гарантируется, что человек с номером i существует в очереди на момент операции.

Для каждой операции COME -k гарантируется, что k не больше текущего размера очереди.

Формат вывода
Для каждой операции WORRY_COUNT выведите одно целое число — количество беспокоящихся людей в очереди.

#include <iostream>
#include <string>
#include <vector>

void change_status(int i, std::vector<bool>& people) {
    if (i > people.size()) {
        people.resize(i + 1);
    }
    if (i > 0) {
        people[i] = true;
    }
}

void come(int k, std::vector<bool>& people) {
    people.resize(people.size() + k + 1);
}

void worry_count(const std::vector<std::string>& commands, const std::vector<int>& values, std::vector<bool>& people) {
    int counter;
    for (bool person : people) {
        if (person) {
            ++counter;
        }
    }
    std::cout << counter << std::endl;
}

int main(void) {
    std::vector<std::string> commands = {"COME", "WORRY", "WORRY", "COME", "WORRY_COUNT", "COME", "WORRY", "WORRY_COUNT"};
    std::vector<int> values = {5, 1, 4, -2, 0, 3, 3, 0};
    std::vector<bool> people; // true - беспокоящийся человек, false - спокойный

    int i = 0;
    for (std::string command : commands) {
        if (command == "WORRY" || command == "QUIET") {
            change_status(i, people);
        } else if (command == "COME") {
            come(i, people);
        } else {
            worry_count(commands, values, people);
        }
        ++i;
    }
    return 0;
}
  • Вопрос задан
  • 296 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Ошибка вот здесь: int counter; Инициализируйте её: int counter = 0;.

#include <iostream>
#include <string>
#include <vector>

void change_status(int i, std::vector<bool>& people) {
    if (i > people.size()) {
        people.resize(i + 1);
    }
    if (i > 0) {
        people[i] = true;
    }
}

void come(int k, std::vector<bool>& people) {
    people.resize(people.size() + k + 1);
}

void worry_count(const std::vector<std::string>& commands, const std::vector<int>& values, std::vector<bool>& people) {
    int counter = 0;
    for (bool person : people) {
        if (person) {
            ++counter;
        }
    }
    std::cout << counter << std::endl;
}

int main(void) {
    std::vector<std::string> commands = {"COME", "WORRY", "WORRY", "COME", "WORRY_COUNT", "COME", "WORRY", "WORRY_COUNT"};
    std::vector<int> values = {5, 1, 4, -2, 0, 3, 3, 0};
    std::vector<bool> people; // true - беспокоящийся человек, false - спокойный

    int i = 0;
    for (std::string command : commands) {
        if (command == "WORRY" || command == "QUIET") {
            change_status(i, people);
        } else if (command == "COME") {
            come(i, people);
        } else {
            worry_count(commands, values, people);
        }
        ++i;
    }
    return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы