Блог пользователя BekzhanKassenov

Автор BekzhanKassenov, история, 7 лет назад, По-русски

Привет, сообщество CodeForces!

Недавно вспомнил одну интересную задачу на C++. Если кратко: можно ли написать такие функции action и cond так, чтобы следующие куски кода работали по-разному:

// Snippet #1:
action();
while (cond()) {
    action();
}
// Snippet #2:
do {
    action();
} while (cond());

Более формально: у вас есть следующие три файла:

common.h
main_while.cpp
main_do_while.cpp

Вам разрешено менять лишь common.h. Сделайте это так, чтобы слово Action напечаталось разное количество раз для запусков main_while.cpp и main_do_while.cpp.

Одно из возможных решений (настоятельно рекомендуется сначала подумать самостоятельно!):

Dirty hack

Скидывайте свои решения в комментариях, не забывайте прятать под спойлеры! Было бы интересно посмотреть на более умные решения (например на такие, которые будут применимы в любом языке, где есть аналоги while и do-while).

  • Проголосовать: нравится
  • +32
  • Проголосовать: не нравится

»
7 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
common.h
»
7 лет назад, # |
  Проголосовать: нравится +26 Проголосовать: не нравится

Solution without macros:

common.h

It uses this magic, which is legal as of C++ 14. The link also contains workarounds if your compiler doesn't support this code.

»
7 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Spoiler