Тип Д6 № 38940 
Анализ программ. Условие выполнения цикла while. Часть 1
i
Определите, сколько существует различных целых значений переменной s, при вводе которых данная программа выведет число 128. Для Вашего удобства программа представлена на четырёх языках программирования.
| Python | Си++ |
|---|
s = int(input()) s = 3 * (s // 10) n = 1 while s < 221: s = s + 13 n = n * 2 print(n) | #include <iostream> using namespace std; int main() { int s, n; cin >> s; s = 3 * (s / 10); n = 1; while (s < 221) { s = s + 13; n = n * 2; } cout << n << endl; return 0; } |
| Паскаль | Алгоритмический язык |
|---|
var s, n: integer; begin readln(s); s := 3 * (s div 10); n := 1; while s < 221 do begin s := s + 13; n := n * 2 end; writeln(n) end. | алг нач цел s, n ввод s s := 3 * div(s,10) n := 1 нц пока s < 221 s := s + 13 n := n * 2 кц вывод n, нс кон |
Решение. Решим задачу с помощью программы методом перебора. Ниже приведена программа на языке PascalABC:
var s, n, i, count: integer;
begin
for i := 0 to 10000 do begin
s := 3 * (i div 10);
n := 1;
while s < 221 do begin
s := s + 13;
n := n * 2
end;
if n = 128 then count := count + 1;
end;
writeln(count);
end.
После выполнения программы количество таких чисел, выведенное на экран, будет равно 40.
Ответ: 40.
Приведем другое решение.
Для того, чтобы программа вывела число 128, цикл должен выполниться 7 раз. Пусть перед началом выполнения цикла значение переменной s было равно s1, тогда после шести повторений цикла оно станет равно s1 + 6 · 13. Это значение должно быть меньше 221, чтобы цикл выполнился еще один раз, тогда s1<143, следовательно, исходное значение переменной s должно быть меньше 480. После семи повторений цикла значение переменной s станет равным s1 + 6 · 13. Это значение должно быть больше или равно 221, чтобы выполнение цикла завершилось, тогда s1≥130, следовательно, исходное значение переменной s должно быть больше или равно 440. Значит, подходят все числа от 440 до 479, таких чисел 40.
Приведём другое решение на языке Python.
k = 0
for i in range(1, 10000):
s = i
s = 3 * (s // 10)
n = 1
while s < 221:
s = s + 13
n = n * 2
if n == 128:
k += 1
print(k)
Ответ: 40