Не уверен верно ли я понял задание
void sqr(int m, int n)
{
int b = 0;
for (int i = m; i <= n; ++i) {
b -= i;
}
cout << pow(b, 2) << endl;
}
2^8072+2^4036+2^5-2^0
10.....00 + 1 ....0 + 100000 - 1
10.....0010......0011111
7 единиц
Program menu;
uses crt;
var m, i: integer;
n, z, x, b: longint;
begin
Writeln('Выберете пункт меню:');
Writeln('[1]Вычисление суммы цыфр числа N');
Writeln('[2]Вывод на экран таблицы квадратов первого десятка');
Writeln('[3]Дано число N. Определить его четность');
Writeln('[4]Выход');
read(m);
case m of 1:
begin
clrscr;
writeln('Введите число N:');
read(n);
x := 10;
z := n mod x;
while n div x > 0 do
begin
b := x;
x := x * 10;
z := z + n mod x div b;
end;
Writeln('Ответ: ', z);
end;
2: begin
clrscr;
for i := 1 to 10 do
begin
writeln('Квадрат ', i, ' = ', sqr(i));
end;
end;
3: begin
clrscr;
writeln('Введите число N:');
read(n);
if (n mod 2 ) = 0 then writeln('Число ', n, ' четное.') else writeln('Число ', n, ' не четное.');
end;
4: exit; end;
<span>end.</span>
поменять местами первую и последнюю цифры в трехзначном числе
Самый быстрый и легкий способ - логически порассуждать, применив правила алгебры логики (АЛ).
Запишем в немного упрощенном виде:
¬(a + b) * c.
Наше выражение состоит из отрицания первой части, в которой есть два слагаемых (ИЛИ = "+"), и умножения (И = "*") первой и второй частей. Так как нам нужно найти наборы, которые дают ложь, то проще всего будет посчитать вторую часть, которая будет ложна.
Вспомним правила АЛ:
0*0 = 0;
1*0 = 0;
0*1 = 0;
1*1 = 1;
Итого видим, что только в одном случае выражение дает истину - 1*1, чего нам стоит избегать.
Итак, попробуем решить вторую часть методом перебора:
1) - истина.
2) - истина.
3) - ложь.
4) - ложь.
5) - истина.
Итого в ответ идут два выражения: 3, 4.
Для достоверности нужно проверить истинные выражения, подставив в первую часть (на случай, если будет "0*1").
Для этого упростим.
¬(a+b) = ¬a * ¬b.
1) - истина.
2) - ложь
5) - истина.
Так как во втором выражении вышла ложь, то оно тоже пойдет в ответ (0*1 = 0).
Ответ: 2, 3, 4.