Математика ЕГЭ
Русский язык ЕГЭ
Математика 5-7
Математика ОГЭ
Информатика
Физика
Обществознание
Кликните, чтобы открыть меню

22. Программирование – циклы, условия

1. Вспоминай формулы по каждой теме
2. Решай новые задачи каждый день
3. Вдумчиво разбирай решения

Простейшие линейные программы

Задание 1 #12830

Укажите наибольшее десятичное число, при вводе которого на экране сначала напечатается 3, а затем 6.

\[\begin{array}{|l|l|l|} \hline Python&C++&Pascal\\ \hline x=int(input())&\#include\;<iostream>&\\ L=0&using\;namespace\;std;&var\; x,L,M:\;integer;\\ M=0&int\;main()\; \{&begin\\ while\;x>0:&\quad int \; L, M, x;&\quad readln(x);\\ \quad L=L+1&\quad cin>>x;&\quad L:=0;M:=0;\\ \quad if\;(x\%2)!=0:&\quad L=0;M=0;&\quad while\;x>0\;do\;begin\\ \quad\quad M=M+x\%8&\quad while\;(x>0)\; \{&\quad\quad L:=L+1;\\ \quad x=x//8&\quad\quad L=L+1;&\quad\quad if\;(x\;mod\;2)<>0\;then\\ print\;(L)&\quad\quad if\;(x\%2!=0)\; \{&\quad\quad\quad M:=M+x\;mod\;8;\\ print\;(M)&\quad\quad\quad M=M+x\%8;&\quad\quad x:=x\;div\;8;\\ &\quad\quad \}&\quad end;\\ &\quad\quad x=x/8;&\quad writeln(L); writeln (M);\\ &\quad \}&end.\\ &\quad cout<<L<<endl<<M;&\\ &\}&\\ \hline \end{array}\]

Определимся, что подсчитывает каждая из переменных.

\(L\) — считает количество цифр в числе в восьмеричной системе счисления (т.к. в конце цикла делим нацело на 8),

\(M\) — сумма нечетных цифр числа в восьмеричной системе счисления.

Итак, по условию необходимо найти такое трехзначное восьмеричное число, у которого сумма нечетных чисел равна 6, и при этом оно максимально.

Так как число должно быть максимальным, последние две цифры в восьмеричной системе счисления — 51. Тогда первой цифрой поставим максимальную четную цифру в восьмеричной сс — 6.

Осталось перевести ответ в десятичную сс: \(651_8=425_{10}\)

Ответ: 425

Задание 2 #12833

Укажите наибольшее десятичное число, при вводе которого на экране сначала напечатается 4, а затем 8.

\[\begin{array}{|l|l|l|} \hline Python&C++&Pascal\\ \hline x=int(input())&\#include\;<iostream>&\\ L=0&using\;namespace\;std;&var\; x,L,M:\;integer;\\ M=0&int\;main()\; \{&begin\\ while\;x>0:&\quad int \; L, M, x;&\quad readln(x);\\ \quad L=L+1&\quad cin>>x;&\quad L:=0;M:=0;\\ \quad if\;(x\%2)!=0:&\quad L=0;M=0;&\quad while\;x>0\;do\;begin\\ \quad\quad M=M+x\%8&\quad while\;(x>0)\; \{&\quad\quad L:=L+1;\\ \quad x=x//8&\quad\quad L=L+1;&\quad\quad if\;(x\;mod\;2)<>0\;then\\ print\;(L)&\quad\quad if\;(x\%2!=0)\; \{&\quad\quad\quad M:=M+x\;mod\;8;\\ print\;(M)&\quad\quad\quad M=M+x\%8;&\quad\quad x:=x\;div\;8;\\ &\quad\quad \}&\quad end;\\ &\quad\quad x=x/8;&\quad writeln(L); writeln (M);\\ &\quad \}&end.\\ &\quad cout<<L<<endl<<M;&\\ &\}&\\ \hline \end{array}\]

Определимся, что подсчитывает каждая из переменных.

\(L\) — считает количество цифр в числе в восьмеричной системе счисления (т.к. в конце цикла делим нацело на 8),

\(M\) — сумма нечетных цифр числа в восьмеричной системе счисления.

Итак, по условию необходимо найти такое четырехзначное восьмеричное число, у которого сумма нечетных чисел равна 8, и при этом оно максимально.

Так как сумма нечетных цифр должна быть равна 8, представим \(8=7+1\). Для получения максимального числа поставим 7 первой цифрой, а 1 — последней. Оставшиеся два места заполним максимальными четными цифрами в восьмеричной сс, т.е. шестерками.

Осталось перевести ответ в десятичную сс: \(7661_8=4017_{10}\)

Ответ: 4017

Задание 3 #15431

Ниже на двух языках программирования записан алгоритм. Получив на вход натуральное десятичное число \(x,\) этот алгоритм печатает два числа: \(L\) и \(M.\) Укажите наибольшее число \(x,\) при вводе которого алгоритм печатает сначала 8, а потом 4.

\[\begin{array}{|l|l|l|} \hline Python&C++&Pascal\\ \hline x=int(input())&\#include\;<iostream>&var\; x,L,M:\;integer;\\ L=1&using\;namespace\;std;&begin\\ M=0&int\;main()\; \{&\quad readln(x);\\ while\;x>0:&\quad int \; x, L, M;&\quad L:=1;\\ \quad M+=1&\quad cin>>x;&\quad M:=0;\\ \quad if\;x\%2==0:&\quad L=1;&\quad while\;x>0\;do\;begin\\ \quad\quad L*=(x\%6)&\quad M=0;&\quad\quad M:=M+1;\\ \quad x//=6&\quad while\;(x>0)\; \{&\quad\quad if\;(x\;mod\;2)=0\;then\\ print\;(L)&\quad\quad M+=1;&\quad\quad\quad L:=L*(x\;mod\;6);\\ print\;(M)&\quad\quad if\;(x\%2==0)\; \{&\quad\quad x:=x\;div\;6;\\ &\quad\quad\quad L*=(x\%6);&\quad end;\\ &\quad\quad \}&\quad writeln(L);\\ &\quad\quad x/=6;&\quad writeln (M);\\ &\quad \}&end.\\ &\quad cout<<L<<endl;&\\ &\quad cout<<M<<endl;&\\ &\}&\\ \hline \end{array}\]

Посмотрим, за что отвечает каждое число. В программе мы делим число \(x\) на 6 до тех пор, пока оно не становится неположительным. С числом \(x\) мы проводим две операции: делим на 6 и берем остаток от деления на 6, значит, делением на 6 мы переводим \(x\) в шестеричную систему счисления.

Мы увеличиваем \(M\) на единицу при каждом делении, значит, \(M\) — это количество разрядов, искомое число четырехзначное.

Если последняя цифра числа в шестеричной системе четная, мы умножаем на нее число \(L.\) Значит, \(L\) — это произведение всех четных цифр, составляющих наше число.

Нам нужно указать наибольшее \(x.\) Значит, нам нужно, чтобы старший разряд был максимально большим — иначе число будет меньше, чем могло бы быть. Начнем подбирать его. Вспомним, что мы в шестеричной системе счисления. Значит, максимальная цифра — 5.

Нечетные цифры не влияют на нашу сумму, а максимальная цифра как раз 5. Разложим 8 на произведение четных цифр: получим только \(2\cdot4\) и наоборот. Значит, обязательно должны быть цифры 2 и 4 в составе искомого числа, а все остальные — нечетные, чтобы не испортили произведение. Мы уже поняли, что, чтобы число было максимальным, стоит ставить во все его разряды цифры как можно больше, то есть идеально, когда число состоит из 5, к тому же что 5 нечетная и не меняет \(L.\) Помним, что нам нужно, чтобы \(L\) было 8, тогда, как мы уже выяснили, нам нужно, чтобы 2 и 4 входили в состав числа. Значит, т.к. \(2<4<5,\) ставим 2 и 4 в младшие разряды, причем 2 — в первый, т.к. \(2<4,\) а 4 — во второй. Получаем число \(5542_6\) и не забываем перевести его в десятичную систему: \(5542_6=2\cdot6^0+4\cdot6^1+5\cdot6^2+5\cdot6^3=1286_{10}.\)

Ответ: 1286