Первую задачу можно решить с таблицы истинности, хотя она довольно простая и без неё.
Обозначим логическими переменными высказывания:
С – «Саша - инициатор прогула»
К – «Коля - инициатор прогула»
В - «Вова - инициатор прогула»
Учтём, что инициатором был кто-то один из них, значит, в таблице истинности мы пишем по одной единице (истина) под предполагаемым инициатором прогула. Всего строк исходных значений будет 3, а не 8.
Каждый из них высказал 2 предложения. Мы их обозначим так:
Саша: НЕ(С), К
Коля: НЕ(К), В
Вова: К, НЕ(В)
Учитель почувствовал, что двое говорят правду наполовину, а один лжёт. Значит надо искать строку, в которой у одного из мальчиков будет 0 и 0, а двух других 0 и 1. Такая строка одна, в представленной таблице она последняя. Саша лжёт, а остальные говорят правду наполовину. Теперь посмотрим на первые три столбика. В этой строке 1 стоит под Сашиным именем. Значит, он и является инициатором прогула.
Если вы знаете о битовых операциях, то ответ тривиальный: 1 << N (это означает следующее: взять двоичную запись числа 1 и сдвинуть её на N позиций влево, дописав N нулей.
Если не знаете, то можно написать цикл, в котором, например, N раз будет умножение на 2. Я напишу оба варианта, соответственно, программа будет выдавать два равных числа. Выбирайте тот, что вам больше нравится.
Код (C++):
#include <iostream>
int main() {
int N;
std::cin >> N;
std::cout << (1 << N) << "\n";
int power = 1;
for (int i = 0; i < N; i++) {
power *= 2;
}
std::cout << power;
}
Пример ввода:
5
Пример вывода:
32
32