Форум программистов, компьютерный форум, киберфорум
acmades
Войти
Регистрация
Восстановить пароль

С++ «Неделя вторая - Контейнер vector - Очередь» #10

Запись от acmades размещена 15.07.2017 в 18:29
Показов 38619 Комментарии 1

Основы разработки на C++: белый пояс
С этим заданием повозился...
Задание:
Люди стоят в очереди, но никогда не уходят из её начала, зато могут приходить в конец и уходить оттуда. Более того, иногда некоторые люди могут прекращать и начинать беспокоиться из-за того, что очередь не продвигается.

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

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 выведите одно целое число — количество беспокоящихся людей в очереди.

Пример:
Ввод
8
COME 5
WORRY 1
WORRY 4
COME -2
WORRY_COUNT
COME 3
WORRY 3
WORRY_COUNT
Вывод
1
2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "stdafx.h"
#include <string>
#include <iostream>
#include <vector>
using namespace std;
void Worry(int& i, vector<bool>& x) {
    x[i] = true; // помечаю i-тый элемент (единичкой в векторе)
}
void Quiet(int& i, vector<bool>& x) {
    x[i] = false; // помечаю i-тый элемент (нолем в векторе)
}
void Come(int n, vector<bool>& x) { //функция убрает или прибавляет к концу вектора элементы(старые значения не меняет) 
    int q = x.size(); // измерили исходный вектор
    x.resize(q + (n)); // изменяем размер, при расширении нолями дополнится, при уменьшении обрежется, оставшиеся значения не изменит
}
void Worry_count(const vector<bool>& x) { //выводит количество "сердитых" единичек
    int counts = 0;
    for (auto i : x) {
        if (i==1) { //если встретим единичку(true), то засчитываем её
            counts++;
        }
    }
    cout << counts << endl; //выводим сколько единичек нашли
}
int main()
{
    int Q;
    cin >> Q; //ввели количество операций
    vector<bool> stack; //создали пустой вектор, принимающий только 0 или 1
    for (int i = 0; Q > i; i++) { //и пока лимит строк не закончится считываем их и выполняем по ходу
        string s; //текстовая составляющая
        int col; //циферка
        cin >> s; //прочитали текст...
        if (s == "WORRY_COUNT") { //если это запрос "вывести количество единичек" ...
            Worry_count(stack); //выводим функцией; а циферку не запрашиваем
        }
        else {
            cin >> col; //иначе запрашиваем циферку
            if (s == "WORRY") { //если запрос на "пометить сердитого", то ...
                Worry(col, stack); // помечаем
            }
            else if (s == "QUIET") { //иначе, если запрос на "убрать сердитость", то ...
                Quiet(col, stack); // убираем
            }
            else if (s == "COME") { //ну или обрезаем, или добавляем очередь
                Come(col, stack); //этой функцией
            }
        }
    }
    return 0;
}
Возможно нагромоздил немного. Но старался сильно не раздувать. Кто подскажет где тут можно уменьшить, покомпактнее сделать?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 1
Комментарии
  1. Старый комментарий
    Аватар для Avazart
    Очередь
    C++
    1
    
    vector<bool> stack;
    Так стек или очередь?


    Задание:
    Люди стоят в очереди, но никогда не уходят из её начала, зато могут приходить в конец и уходить оттуда. Более того, иногда некоторые люди могут прекращать и начинать беспокоиться из-за того, что очередь не продвигается.
    Вопрос что курил тот кто писал это задание?

    Основы разработки на C++: белый пояс
    Наркомания, зеленый пояс.

    Бросайте этот курс пока не поздно ))).

    C++
    1
    
    vector<bool>
    Плохое решение.
    Запись от Avazart размещена 22.12.2017 в 16:35 Avazart вне форума
 
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru