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

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

Запись от acmades размещена 15.07.2017 в 18:29
Показов 38612 Комментарии 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 вне форума
 
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru