Анализ программы, содержащей подпрограммы, циклы и ветвления

© К. Поляков, 2009-2014

20 (повышенный уровень, время – 5 мин)

Тема:  Анализ программы, содержащей подпрограммы, циклы и ветвления.

Что нужно знать:

  •  операции целочисленного деления (div) и взятия остатка (mod)
  •  как работают операторы присваивания, циклы и условные операторы в языке программирования
Пример задания:

Ниже записан алгоритм. Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 2, а потом 15.

var x, a, b: integer;

begin

 readln(x);

 a:=0; b:=1;

 while x>0 do begin

   a:=a+1;

   b:=b*(x mod 10);

   x:= x div 10

 end;

 writeln(a); write(b)

end.

Решение:

  1.  видим, что в последний строках выводятся на экран переменные a и b, поэтому сначала нужно определить, что они обозначают в программе
  2.  перед началом цикла переменная a обнуляется, а переменная b равна 1
  3.  на каждом шаге цикла при выполнении некоторого условия переменная a увеличивается на 1, а b умножается на x mod 10, то есть, на остаток от деления x на 10 – это последняя цифра десятичной записи числа x  
  4.  в конце каждого шага цикла операция x:=x div 10 отсекает последнюю цифру в десятичной записи числа
  5.  цикл заканчивается, когда перестаёт выполняться условие x > 0, то есть, когда все цифры исходного числа отброшены
  6.  таким образом, делаем вывод: после завершения цикла в переменной a находится количество цифр в десятичной записи числа, а в переменной b – их произведение
  7.  если было выведено 2 и 15, то в числа 2 цифры, и их произведение равно 15; таким образом, нам нужно найти минимальное пятизначное число, в котором произведение значений цифр равно 15
  8.  поскольку число 15 может быть разложено на два сомножителя, меньших 10, только как 35, минимальное подходящее число – 35.
  9.  ответ: 35.
Ещё пример задания:

Ниже записан алгоритм. Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 2.

var x, a, b, c: integer;

begin

 readln(x);

 a:= 0; b:= 0;

 while x > 0 do begin

   c:= x mod 2;

   if c = 0 then a:= a + 1

   else b:= b + 1;

   x:= x div 10;

 end;

 writeln(a);

 writeln(b);

end.

Решение:

  1.  видим, что в последний строках выводятся на экран переменные a и b, поэтому сначала нужно определить, что они обозначают в программе
  2.  перед началом цикла обе переменные обнуляются
  3.  на каждом шаге цикла при выполнении некоторого условия переменная a увеличивается на 1, а если это условие не выполняется, то на 1 увеличивается b; таким образом, обе переменных – счётчики
  4.  теперь посмотрим на условие c = 0: в предыдущей строке в переменную c записывается остаток от деления числа x на 2, то есть, переменная c определяет четность числа или, что равносильно, чётность его последней цифры
  5.  если последняя цифра чётная, то увеличивается счётчик a, а если нечётная – увеличивается счётчик b
  6.  в конце каждого шага цикла операция x:=x div 10 отсекает последнюю цифру в десятичной записи числа
  7.  таким образом, делаем вывод: после завершения цикла в переменной a находится количество чётных цифр в десятичной записи числа, а в переменно b – количество нечётных цифр
  8.  если было выведено 3 и 2, то в числа 5 цифр, из них 3 чётных и 2 нечётных; таким образом, нам нужно найти минимальное пятизначное число, в котором 3 чётные и 2 нечётные цифры
  9.  минимальная чётная цифра – это 0, минимальная начётная – 1; 0 не может стоять на первом месте, поэтому число начинается с 1
  10.  для получения минимального числа после 1 должны идти нули и последняя цифра – снова 1
  11.  ответ: 10001
Ещё пример задания:

Ниже записан алгоритм. После выполнения алгоритма было напечатано 3 числа. Первые два напечатанных числа – это числа 9 и 81. Какое наибольшее число может быть напечатано третьим?

var x, y, z: integer;

   r, a, b: integer;

begin

 readln(x, у);

 if у > x then begin

   z:= x; x:= у; у:= z;

 end;

 a:= x; b:= y;

 while b > 0 do begin

   r:= a mod b;

   a:= b;

   b:= r;

 end;

 writeln(a);

 writeln(x);

 write(у);

end.

Решение:

  1.  сложность этой задачи состоит в том, чтобы разобраться в алгоритме
  2.  сначала вводятся два числа и переставляются так, чтобы в переменной x было наибольшее число, а в переменной y – наименьшее из двух:

 if у > x then begin

   z:= x; x:= у; у:= z;

 end;

  1.  затем исходные значения копируются в переменные a и b и с ними выполняется следующий алгоритм

 while b > 0 do begin

   r:= a mod b;

   a:= b;

   b:= r;

 end;

его суть сводится к тому, что меньшее из двух чисел, a и b, каждый раз заменяется на остаток от деления большего на меньшее до тех пор, пока этот остаток не станет равен нулю;

  1.  делаем вывод, что это классический Алгоритм Евклида, который служит для вычисления наибольшего общего делителя (НОД) двух чисел; это делитель в результате оказывается в переменной a
  2.  смотрим, что выводится на экран: сначала значение переменной a (наибольший общий делитель исходных чисел, НОД(x,y)), затем значение x (большее из исходных чисел) и значение y (меньшее из исходных чисел)
  3.  по условию первое число – 9, второе – 81, поэтому третье число должно быть меньше, чем 81, и НОД(81,y) = 9
  4.  наибольшее число, которое меньше 81 и делится на 9, равно 72 (обратите внимание, что исходные числа не могут быть равны, потому что в этом случае их НОД был бы равен 81)
  5.  ответ: 72
Ещё пример задания:

Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:=L+1;

   if M < (x mod 10) then begin

     M:=x mod 10;

   end;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

 Решение:

  1.  для решения задачи необходимо понять, что делает эта программа
  2.  если это не видно сразу, можно выполнить ручную прокрутку для какого-то простого числа, например, для числа 251:

операторусловиеxLMreadln(x);251??L:=0; M:=0;00while x > 0 do…251 > 0? даL:=L+1;1if M<(x mod 10) then…M <(251 mod 10)? даM:=x mod 10;1x:=x div 10;25while x > 0 do…25 > 0? даL:=L+1;2if M<(x mod 10) then…M <(25 mod 10)? даM:=x mod 10;5x:=x div 10;2while x > 0 do…2 > 0? даL:=L+1;3if M<(x mod 10) then…M <(2 mod 10)? нетx:=x div 10;0while x > 0 do…0 > 0? нетwriteln(L); write(M);35

  1.  можно догадаться, что в результате работы программы в переменной L окажется число цифр числа, а в переменной M – наибольшая цифра, но это предположение нужно постараться доказать
  2.  нужно вспомнить (и запомнить), что для целого числа остаток от деления на 10 (x mod 10) – это последняя цифра в десятичной записи числа, а целочисленное деление (x div 10) отсекает последнюю цифру, то есть из 123 получается 12
  3.  рассмотрим цикл, число шагов которого зависит от изменения переменной x:

 while x > 0 do begin

   ...

   x:= x div 10;      { отсечение последней цифры }

 end;

здесь оставлены только те операторы, которые влияют на значение x

  1.  из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл выполняется столько раз, сколько цифр в десятичной записи введенного числа
  2.  на каждом шаге цикла переменная L увеличивается на 1:

 L:=L+1;

других операторов, меняющих значение L, в программе нет; поэтому после завершения цикла в переменной L действительно находится количество цифр

  1.  теперь разберемся с переменной M, которая сначала равна 0; оператор, в котором она меняется, выглядит так:

 if M < (x mod 10) then begin

   M:=x mod 10;

 end;

учитывая, что x mod 10 – это последняя цифра десятичной записи числа, получается что если эта цифра больше, чем значение M, она записывается в переменную M;  

  1.  этот оператор выполняется в цикле, причем выражение x mod 10 по очереди принимает значения всех цифр исходного числа; поэтому после завершения циклам в переменной M окажется наибольшая из всех цифр, то есть наша догадка подтверждается
  2.  итак, по условию задачи фактически требуется найти наибольшее трехзначное число, в котором наибольшая цифра – 7; очевидно, что это 777.
  3.  ответ: 777.

Возможные ловушки и проблемы:это очень неплохая задача на понимание, тут достаточно сложно «вызубрить» метод решения, можно только освоить последовательность (системность) анализаручной прокрутки в такой задаче недостаточно, по её результатам можно угадать алгоритм, но можно и не угадать; в критическом случае можно сделать ручную прокрутку для нескольких чисел им попытаться понять закономерность

Ещё пример задания:

Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 120.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=1;

 while x > 0 do begin

   L:=L+1;

   M:= M*(x mod 8);

   x:= x div 8;

 end;

 writeln(L); write(M);

end.

 Решение:

  1.  для решения задачи необходимо понять, что делает эта программа; повторяя рассуждения из предыдущего примера, выясняем, что
    1.  переменная L с каждым шагом цикла увеличивается на 1
    2.  переменная x на каждом шаге цикла делится на 8 и остаток отбрасывается

поэтому можно сделать вывод, что в конце цикла переменная L будет равна количеству цифр введенного числа, записанного в восьмеричной системе счисления; таким образом, восьмеричная запись числа содержит ровно 3 цифры

  1.  выражение x mod 8 – это последняя цифра восьмеричной записи числа; на каждом шаге цикла переменная M умножается на эту величину, поэтому в результате в M будет записано произведение всех цифр восьмеричной записи введенного числа
  2.  по условию это произведение равно 120, то есть , где a, b и с – числа от 0 до 7 (которые в восьмеричной системе счисления записываются одной цифрой)
  3.  поскольку нам нужно наибольшее число, перебираем делители числа 120, начиная со старшей цифры – 7; видим, что 120 на 7 не делится, поэтому такой цифры в восьмеричной записи числа нет
  4.  но 120 делится на 6, поэтому старшей цифрой может быть 6 – только в том случае, когда второй сомножитель можно представить в виде произведения двух чисел в интервале 1..6
  5.  делим 120 на 6, получаем 20; это число представляется как произведение 5 и 4, каждое из этих чисел записывается в виде одной восьмеричной цифры, то есть, они нам подходят
  6.  вспомним, что нас интересует максимальное число, поэтому цифры нужно выстроить в порядке убывания: 6548
  7.  заметим, что мы получили число в восьмеричной системе, а ответ нужно дать в десятичной; переводим: 6548 = 6·82 + 5·81 + 4·80 = 428.
  8.  ответ: 428.

Возможные ловушки и проблемы:поскольку в цикле идет деление на 8, мы получаем цифры числа в восьмеричной системе; каждая из них должна быть в интервале 0..7 (не может быть 8 и 9)на последнем шаге нужно не забыть перевести число из восьмеричной системы в десятичную

Задачи для тренировки1:
  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   M:= M + x mod 10;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 8.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   if x mod 2 = 0 then

     M:= M + x mod 10;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 0.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   if x mod 2 = 0 then

     M:= M + x mod 10;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 8.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   if x mod 2 = 1 then

     M:= M + x mod 10;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   if x mod 2 = 0 then

     M:= M + (x mod 10) div 2;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   if x mod 2 = 1 then

     M:= M + (x mod 10) div 2;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:=L+1;

   if M < x then begin

     M:=x mod 10;

   end;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 8.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:=L+1;

   if (M < x) and (x mod 2 = 0) then begin

     M:=x mod 10;

   end;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 10.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:=L+1;

   if (M < x) and (x mod 2 = 1) then begin

     M:= (x mod 10) * 2;

   end;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 10.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:=L+1;

   if M < x then begin

     M:= (x mod 10) * 2;

   end;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 2, а потом 72.

var x, a, b: integer;

begin

 readln(x);

 a:=0; b:=1;

 while x>0 do begin

   a:=a+1;

   b:=b*(x mod 10);

   x:= x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 2, а потом 14.

var x, a, b : integer;

begin

 readln(x);

 a := 0; b := 1;

 while x > 0 do begin

   a := a + 1;

   b := b * (x mod 10);

   x := x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, a, b : integer;

begin

 readln(x);

 a := 0; b := 1;

 while x > 0 do begin

   a := a + 1;

   b := b * (x mod 10);

   x := x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 0.

var x, a, b : integer;

begin

 readln(x);

 a := 0; b := 1;

 while x > 0 do begin

   a := a + 1;

   b := b * (x mod 10);

   x := x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   M:= M + x mod 10;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 8.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   if x mod 2 = 0 then

     M:= M + x mod 10;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 0.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   if x mod 2 = 0 then

     M:= M + x mod 10;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 8.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   if x mod 2 = 1 then

     M:= M + x mod 10;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   if x mod 2 = 0 then

     M:= M + (x mod 10) div 2;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:= L + 1;

   if x mod 2 = 1 then

     M:= M + (x mod 10) div 2;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:=L+1;

   if M < x then begin

     M:=x mod 10;

   end;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 8.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:=L+1;

   if (M < x) and (x mod 2 = 0) then begin

     M:=x mod 10;

   end;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 10.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:=L+1;

   if (M < x) and (x mod 2 = 1) then begin

     M:= (x mod 10) * 2;

   end;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 28.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 0 do begin

   L:=L+1;

   if M < x then begin

     M:= M + (x mod 10) * 2;

   end;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 2, а потом 72.

var x, a, b: integer;

begin

 readln(x);

 a:=0; b:=1;

 while x>0 do begin

   a:=a+1;

   b:=b*(x mod 10);

   x:= x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 2, а потом 14.

var x, a, b : integer;

begin

 readln(x);

 a := 0; b := 1;

 while x > 0 do begin

   a := a + 1;

   b := b * (x mod 10);

   x := x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, a, b : integer;

begin

 readln(x);

 a := 0; b := 1;

 while x > 0 do begin

   a := a + 1;

   b := b * (x mod 10);

   x := x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 36.

var x, a, b : integer;

begin

 readln(x);

 a := 0; b := 1;

 while x > 0 do begin

   a := a + 1;

   b := b * (x mod 10);

   x := x div 10;

 end;

 writeln(a); write(b);

end.

  1.  (Д.Ю. Мельникова, г. Саратов) Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите набольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 24.

var x, a, b : integer;

begin

 readln(x);

 a := 0; b := 1;

 while x > 0 do begin

   a := a + 1;

   b := b * (x mod 8);

   x := x div 8;

 end;

 writeln(a); write(b);

end.

  1.  (Д.Ю. Мельникова, г. Саратов) Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 10.

var x, a, b : integer;

begin

 readln(x);

 a := 0; b := 1;

 while x > 0 do begin

   a := a + 1;

   b := b * (x mod 8);

   x := x div 8;

 end;

 writeln(a); write(b);

end.

  1.  (Д.Ю. Мельникова, г. Саратов) Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 6.

var x, a, b : integer;

begin

 readln(x);

 a := 0; b := 1;

 while x > 0 do begin

   a := a + 1;

   b := b * (x mod 6);

   x := x div 6;

 end;

 writeln(a); write(b);

end.

  1.  (Д.Ю. Мельникова, г. Саратов) Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 9.

var x, a, b : integer;

begin

 readln(x);

 a := 0; b := 1;

 while x > 0 do begin

   a := a + 1;

   b := b * (x mod 5);

   x := x div 5;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 2, а потом 21.

var x, a, b: integer;

begin

 readln(x);

 a:=0; b:=1;

 while x>0 do begin

   a:=a+1;

   b:=b*(x mod 10);

   x:= x div 10

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 35.

var x, a, b: integer;

begin

 readln(x);

 a:=0; b:=1;

 while x>0 do begin

   a:=a+1;

   b:=b*(x mod 10);

   x:= x div 10

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 4.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=9;

 while x > 5 do begin

   L:= L + 1;

   if M > (x mod 10) then M:= x mod 10;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: integer;

begin

 readln(x);

 L:=0; M:=0;

 while x > 5 do begin

   L:= L + 1;

   if M < (x mod 10) then M:= x mod 10;

   x:= x div 10;

 end;

 writeln(L); write(M);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 6, а потом 5.

var x, a, b: integer;

begin

 readln(x);

 a:=0; b:=0;

 while x>0 do begin

   a:= a + 2;

   b:= b + (x mod 10);

   x:= x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 8, а потом 19.

var x, a, b: integer;

begin

 readln(x);

 a:=0; b:=0;

 while x>0 do begin

   a:= a + 2;

   b:= b + (x mod 10);

   x:= x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записан алгоритм. После выполнения алгоритма было напечатано 3 числа. Первые два напечатанных числа – это числа 7 и 42. Какое наибольшее число может быть напечатано третьим?

var x, y, z: integer;

   r, a, b: integer;

begin

 readln(x, у);

 if у > x then begin

   z:= x; x:= у; у:= z;

 end;

 a:= x; b:= y;

 while b > 0 do begin

   r:= a mod b;

   a:= b;

   b:= r;

 end;

 writeln(a);

 writeln(x);

 write(у);

end.

  1.  Ниже записан алгоритм. После выполнения алгоритма было напечатано 3 числа. Первые два напечатанных числа – это числа 13 и 65. Какое наибольшее число может быть напечатано третьим?

var x, y, z: integer;

   r, a, b: integer;

begin

 readln(x, у);

 if у > x then begin

   z:= x; x:= у; у:= z;

 end;

 a:= x; b:= y;

 while b > 0 do begin

   r:= a mod b;

   a:= b;

   b:= r;

 end;

 writeln(a);

 writeln(x);

 write(у);

end.

  1.  Ниже записан алгоритм. Укажите наименьшее из таких чисел N, при вводе которых алгоритм напечатает 17.

var N, q, i: integer;

begin

 read(N);

 for i:=1 to N-1 do begin

   if N mod i = 0 then q:=i

 end;

 write(q)

end.

  1.  (http://ege.yandex.ru) Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите, сколько есть таких чисел , при вводе которых алгоритм печатает сначала 2, а потом 12.

var x, a, b: integer;

begin

 readln(x);

 a:=0; b:=1;

 while x > 0 do begin

   a:= a + 1;

   b:= b * (x mod 10);

   x:= x div 10;

 end;

 writeln(a); write(b);

end.

  1.  (http://ege.yandex.ru) Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее из чисел , при вводе которых алгоритм печатает сначала 2, а потом 8.

var x, a, b: integer;

begin

 readln(x);

 a:=0; b:=0;

 while x > 0 do begin

   a:= a + 1;

   b:= b + (x mod 100);

   x:= x div 100;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее  из чисел , при вводе которых алгоритм печатает сначала 2, а потом 8.

var x, a, b: integer;

begin

 readln(x);

 a:=0; b:=1;

 while x > 0 do begin

   a:= a + 1;

   b:= b * (x mod 100);

   x:= x div 100;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее  из чисел , при вводе которых алгоритм печатает сначала 14, а потом 6.

var x, a, b, c: integer;

begin

 readln(x);

 a := 0; b := 10;

 while x>0 do begin

   с := x mod 10;

   a := a+c;

   if c<b then b := c;

   x := x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее  из чисел , при вводе которых алгоритм печатает сначала 15, а потом 5.

var x, a, b, c: integer;

begin

 readln(x);

 a := 0; b := 10;

 while x>0 do begin

   с := x mod 10;

   a := a+c;

   if c<b then b := c;

   x := x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наибольшее  из чисел , при вводе которых алгоритм печатает сначала 13, а потом 3.

var x, a, b, c: integer;

begin

 readln(x);

 a := 0; b := 10;

 while x>0 do begin

   с := x mod 10;

   a := a+c;

   if c<b then b := c;

   x := x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите наименьшее  из чисел , при вводе которых алгоритм печатает сначала 19, а потом 4.

var x, a, b, c: integer;

begin

 readln(x);

 a := 0; b := 10;

 while x>0 do begin

   с := x mod 10;

   a := a+c;

   if c<b then b := c;

   x := x div 10;

 end;

 writeln(a); write(b);

end.

  1.  Ниже записан алгоритм. Укажите набольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 2.

var x, a, b, c: integer;

begin

 readln(x);

 a:= 0; b:= 0;

 while x > 0 do begin

   c:= x mod 2;

   if c = 0 then a:= a + 1

   else b:= b + 1;

   x:= x div 10;

 end;

 writeln(a);

 writeln(b);

end.

  1.  Ниже записан алгоритм. Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 4, а потом 0.

var x, a, b, c: integer;

begin

 readln(x);

 a:= 0; b:= 0;

 while x > 0 do begin

   c:= x mod 2;

   if c = 0 then a:= a + 1

   else b:= b + 1;

   x:= x div 10;

 end;

 writeln(a);

 writeln(b);

end.

  1.  Ниже записан алгоритм. Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 2.

var x, a, b, c: integer;

begin

 readln(x);

 a:= 0; b:= 0;

 while x > 0 do begin

   c:= x mod 2;

   if c = 0 then a:= a + 1

   else b:= b + 1;

   x:= x div 8;

 end;

 writeln(a);

 writeln(b);

end.

  1.  Ниже записан алгоритм. Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 4, а потом 0.

var x, a, b, c: integer;

begin

 readln(x);

 a:= 0; b:= 0;

 while x > 0 do begin

   c:= x mod 2;

   if c = 0 then a:= a + 1

   else b:= b + 1;

   x:= x div 6;

 end;

 writeln(a);

 writeln(b);

end.

  1.  Получив на вход число х, этот алгоритм печатает два числа К и R. Укажите наименьшее из таких чисел х, при вводе которых алгоритм печатает сначала 4, а потом 3.

var x, i, K, R, y: integer;

begin

 readln(x);

 K := 0; R := 9;

 y := x mod 10;

 while x > 0 do begin

   K := K + 1;

   if R > x mod 10 then

     R := x mod 10;

   x := x div 10

 end;

 R := y - R;

 writeln(K); writeln(R)

end.

  1.  Получив на вход число х, этот алгоритм печатает два числа К и R. Укажите наибольшее из таких чисел х, при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, i, K, R, y: integer;

begin

 readln(x);

 K := 0; R := 9;

 y := x mod 10;

 while x > 0 do begin

   K := K + 1;

   if R > x mod 10 then

     R := x mod 10;

   x := x div 10

 end;

 R := y - R;

 writeln(K); writeln(R)

end.

1 Источники заданий:

Авторские разработки.

Тренировочные и диагностические работы МИОО.

Путимцева Ю.С. Информатика. Диагностические работы в формате ЕГЭ 2012. М.: МЦНМО, 2012.

Евич Л.Н., Кулабухов С.Ю. Информатика и ИКТ. Подготовка к ЕГЭ-2014. — Ростов-на-Дону: Легион, 2013.

  http://kpolyakov.spb.ru

← Предыдущая
Страница 1
Следующая →

Описание к данному материалу отсутствует

У нас самая большая информационная база в рунете, поэтому Вы всегда можете найти походите запросы

Искать ещё по теме...

Похожие материалы:

Отчет по производственной практике на строительной компании

Отчет по производственной практике. Место прохождения практики: строительная компания. Преддипломная практика. Организационная структура управления строительной компании.

Выбор автоматических выключателей

Пояснительная записка к курсовому проекту по дисциплине «Электрические и электронные аппараты» по теме: «Выбор автоматических выключателей» В ходе выполнения курсового проекта были выбраны выключатель типов ВА 55-41 и ВА 61F29 для данной электрической сети предприятия.

Реферат на тему:„Методи контрацепції”

Онкология, ответы на тесты

Тест с ответами. Общие вопросы онкологии. Рак желудка, легкого, молочной железы, пищевода. Рак кожи и пигментные опухоли.

Список чтения на лето 5 класс

Сохранить?

Пропустить...

Введите код

Ok