Условие
Возьмем какое-нибудь натуральное число [latex]n[/latex]. Будем изменять его следующим образом: если число четное, то разделим его на [latex]2[/latex], если нечетное, прибавим [latex]1[/latex]. После нескольких таких изменений мы всегда получаем число [latex]1[/latex]. Например, из числа [latex]11[/latex] получается число [latex]12[/latex], затем [latex]6[/latex], [latex]3[/latex], [latex]4[/latex], [latex]2[/latex] и, наконец, [latex]1[/latex]. Таким образом, для получения [latex]1[/latex] из [latex]11[/latex] нужно проделать [latex]6[/latex] изменений.
Напишите программу, которая считывает натуральное число и выводит количество изменений данного числа до получения [latex]1[/latex].
Код
1 2 3 4 5 6 7 8 9 10 11 |
class Test { static function main() { var n: Float = 321; var counter: Int = 0; while (n != 1){ if (n % 2 == 0) n /= 2 else n += 1; counter++; } trace(counter); } } |
Решение
- Цикл начинается со значением счетчика 0, так как возможны случаи, когда операций над [latex]n[/latex] вообще не нужно будет производить (конкретно — при [latex]n=1[/latex]).
- Поскольку нам гарантируют, что входное число [latex]n[/latex] — натуральное, то цикл будет работать до тех пор, пока [latex]n>1[/latex]
- После каждой итерации значение счетчика будет увеличено на [latex]1[/latex].
- В теле цикла мы проверяем чётность числа [latex]n[/latex] путём проверки остатка от деления [latex]n[/latex] на [latex]2[/latex]. Если остаток равен 0, то число чётное, в противном случае — нечётное. По результату проверки [latex]n[/latex] может быть преобразовано двумя способами:
- если [latex]n[/latex] — нечетное, то значение [latex]n[/latex] увеличивается на [latex]1[/latex];
- в противном случае [latex]n[/latex] делится на [latex]2[/latex].
Реализуем описанный алгоритм, после которого отправляем на печать значение счетчика
Ссылка на решение задачи
Ссылка на условие задачи