C/C++

Задача по информатике C++

На столе у большого начальника лежит стопка из N заявлений, пронумерованных сверху вниз от 1 до N.
Первое заявление он подписывает и убирает из стопки, второе – выбрасывает в мусорную корзину, третье – кладёт вниз стопки. Далее процесс продолжается аналогично, пока заявления в стопке не закончатся.
Определите, будет ли заявление с номером K подписано или выброшено, а также номер шага, на котором это произойдёт. Одним шагом является каждая из трёх операций, описанных выше.

Формат входных данных

Первая строка входных данных содержит целое число N, вторая строка – целое число K (1 ≤ N ≤ 109, 1 ≤ K ≤ N).

Формат выходных данных

В первой строке выведите «Yes», если заявление с номером K будет подписано, и «No», если оно будет выброшено.

Во второй строке выведите номер шага, на котором это произойдёт.
 #include  
#include
#include
using namespace std;
int main() {
size_t n, k, m = 0;
cin >> n >> k;
deque box(n);
iota(box.begin(), box.end(), 1);
while (!box.empty()) {
const auto front = box.front();
if (0 == ++m % 3) box.push_back(front);
else if (2 == m % 3);
else if (front == k) break;
box.pop_front();
}
puts(box.empty() ? "No" : "Yes");
cout
Сергей Платонов
Сергей Платонов
77 031
Лучший ответ
Решение на C++:

#include <iostream> using namespace std; int main() { int n, k, step = 0; cin >> n >> k; while (n > 0) { step++; if (k == 1) { cout << "Yes\n" << step << endl; return 0; } if (k == 2) { k--; } else if (k > 2) { k -= 2; } n--; } cout << "No\n"; return 0; }

Сначала считываем значения n и k. Затем запускаем цикл, который повторяется, пока есть заявления в стопке. На каждой итерации увеличиваем счётчик шагов на 1. Если текущее заявление имеет номер 1, выводим "Yes" и номер шага, на котором это произошло, и завершаем программу. Если текущее заявление имеет номер 2, просто уменьшаем номер нужного заявления на 1. В оставшихся случаях уменьшаем номер нужного заявления на 2. После этого уменьшаем количество заявлений в стопке на 1. Если заявление с номером k не было найдено до того, как закончились заявления в стопке, выводим "No".


Это оно?
Nikolae Pavlov неверно выводит
ВВОД
4
3
ОЖИДАЕМЫЙ ВЫВОД
NO
5