ЕГЭ-05. Анализ простых алгоритмов

18 задач
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
кп05-16#85630

Витя пригласил своего друга Сергея в гости, но не сказал ему код от цифрового замка своего подъезда, а послал следующее SMS-сообщение: «в последовательности чисел 3, 1, 8, 2, 6 все числа больше 5 разделить на 2, а затем удалить из полученной последовательности все четные числа». Выполнив указанные в сообщении действия, Сергей получил следующий код для цифрового замка:

1) 3, 1 2) 1, 1, 3 3) 3, 1, 3 4) 3, 3, 1

кп05-5#85619

Для составления 4-значных чисел используются цифры 1, 2, 3, 4, 5, при этом соблюдаются следующие правила:

На первом месте стоит одна из цифр 1, 2 или 3.

После каждой четной цифры идет нечетная, а после каждой нечетной - четная

Третьей цифрой не может быть цифра 5.

Какое из перечисленных чисел получено по этим правилам?

1) 4325
2) 1432
3) 1241
4) 3452

20194#20194
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число x, не превосходящее 1000, и выводится количество единиц в двоичной записи этого числа. Программист торопился и написал программу неправильно.
Паскаль Си
var x, cnt: integer; 
begin
(*)
(1)  readln(x);
(2)  cnt := 0;
(3)  while x > 0 do begin
(4)    cnt := cnt + 1;
(5)    x := x mod 2;
(6)  end;
(7)  writeln (cnt)
end.
#include<stdio.h>
main(){
  int x, cnt;
(*)
(1)  scanf("%d",&x);
(2)  cnt = 0;
(3)  while (x > 0) {
(4)    cnt = cnt + 1;
(5)    x = x % 2;
(6)  }
(7)  printf("%d", cnt);
}
 
 
Последовательно выполните следующее:
1. Напишите, что выведет эта программа при вводе числа 6.
2. Приведите пример такого числа x, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.


В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль
Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
20193#20193
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число x, не превосходящее 1000, и выводится количество значащих цифр в двоичной записи этого числа. Программист торопился и написал программу неправильно.
Паскаль Си
var x, cnt: integer; 
begin
(*)
(1)  readln(x);
(2)  cnt := 0;
(3)  while x > 0 do begin
(4)    cnt := cnt + x mod 2;
(5)    x := x div 10;
(6)  end;
(7)  writeln (cnt)
end.
#include<stdio.h>
main(){
  int x, cnt;
(*)
(1)  scanf("%d",&x);
(2)  cnt = 0;
(3)  while (x > 0) {
(4)    cnt = cnt + x % 2;
(5)    x = x / 10;
(6)  }
(7)  printf("%d", cnt);
}
 

Последовательно выполните следующее:
1. Напишите, что выведет эта программа при вводе числа 15.
2. Приведите пример такого числа x, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.


В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 
20192#20192
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится сумма цифр этого числа.   Программист торопился и написал программу неправильно:
 
Паскаль Си
var N: longint;
    sum, d: integer; 
begin
(*)
(1)  readln(N);
(2)  sum := 1;
(3)  while N > 0 do begin
(4)    d := N mod 10;
(5)    N := N div 10;
(6)    sum := d;
(7)  end;
(8)  writeln ( sum )
end.
#include<stdio.h>
main(){
  int N;
  int sum, d;
(*)
(1)  scanf("%d",&N);
(2)  sum = 1;
(3)  while (N > 0) {
(4)    d = N % 10;
(5)    N = N / 10;
(6)    sum = d;
(7)  }
(8)  printf("%d", sum);
}
 
Последовательно выполните следующее.
1.       Напишите, что выведет эта программа при вводе числа 256.
2.       Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт правильный результат.
3.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т. е. приведите правильный вариант строки.


В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 
20191#20191
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится сумма цифр этого числа.   Программист торопился и написал программу неправильно:
 
Паскаль Си
var N: longint;
    sum, d: integer; 
begin
(*)
(1)  readln(N);
(2)  sum := 1;
(3)  while N > 0 do begin
(4)    d := d mod 10;
(5)    N := N div 10;
(6)    sum := sum + 1;
(7)  end;
(8)  writeln ( sum )
end.
#include<stdio.h>
main(){
  int N;
  int sum, d;
(*)
(1)  scanf("%d",&N);
(2)  sum = 1;
(3)  while (N > 0) {
(4)    d = d % 10;
(5)    N = N / 10;
(6)    sum = sum + 1;
(7)  }
(8)  printf("%d", sum);
}
 
Последовательно выполните следующее.
1.       Напишите, что выведет эта программа при вводе числа 256.
2.       Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт правильный результат.
3.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т. е. приведите правильный вариант строки.


В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 

20190#20190
На вход программы поступают 4 неотрицательных целых числа, не превышающие 1000, среди которых могут быть одинаковые. Нужно написать программу, которая выводит количество чисел, кратных 3, и максимальное из этих чисел. Если среди входных данных нет чисел, кратных трёх, программы должна вывести слово 'NO'. Для решения этой задачи ученик написал такую программу:
 
Паскаль Си
const n = 4;
var i, x: integer;
var maximum, count: integer;
begin
(*)
(1)  count := 0;
(2)  maximum := 999;
(3)  for i:=1 to n do begin
(4)    read( x );
(5)    if x mod 3 = 0 then begin
(6)      count := count + 1;
(7)      if x < maximum then
(8)         maximum := x;
(9)    end;
(10)  end;
(11)  if count > 0 then begin
(12)    writeln(count);
(13)    writeln(maximum);
(14)  end
(15)  else
(16)    writeln('NO');                 
end.
#include<stdio.h>
main(){
  conts int n=4;  
  int i, x;
  int maximum, count;
(*)
(1)  count = 0; 
(2)  maximum=999;
(3)  for(i=1;i<=n;i++){
(4)   scanf("%d",&x);
(5)   if (x % 3 == 0) {
(6)    count = count +1;
(7)    if (x < maximum)
(8)       maximum = x;
(9)    } 
(10)  }
(11) if (count>0) {
(12)    print("%d\n",count);
(13)    print("%d\n", maximum);
(14) } 
(15) else
(16)    printf("NO");
}
 

Последовательно выполните следующее.
1.       Напишите, что выведет эта программа при вводе чисел 2  9  4  3.
2.       Приведите пример такой последовательности, содержащей число, кратное 3, что, несмотря на ошибки, программа выдаст верный ответ.
3.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки: выпишите строку, в которой сделана ошибка, и приведите правильный вариант
строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 

20188#20188
Требовалось написать программу, которая получает на вход натуральное число N, не превосходящее 109, и выводит число, которое получается из N после удаления всех единиц; порядок остальных цифр при этом не меняется. Например, число 19520125 должно быть преобразовано в число 952025. Число, в котором все цифры – единицы и нули, должно быть преобразовано в 0. Незначащие нули в старших разрядах полученного числа печатать не нужно. Программист торопился и написал программу неправильно.
Паскаль Си
var N, R, T: longint;
   d: integer;
begin
(*)
(1)  readln(N);
(2)  R:=0;
(3)  T:=1;
(4)  while N>0 do begin
(5)    d := N mod 10;
(6)    if d<>1 then begin
(7)      R := R + d*T;
(8)      T := T+1
(9)    end;
(10)    N := N div 10;
(11)  end;
(12)  writeln(T);
end.
#include<stdio.h>
main(){
  int N, R, T;
  int d;
(*)
(1)  scanf("%d",&N);
(2)  R=0;
(3)  T=1;
(4)  while (N > 0) {
(5)    d = N % 10;
(6)    if (d!=1){
(7)       R = R + d*T;
(8)       T = T+1;
(9)    } 
(10)    N = N / 10;
(11)  }
(12)  printf("%d", T);
}

Последовательно выполните следующее.
1.       Напишите, что выведет эта программа при вводе числа 314.
2.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) Выпишите строку, в которой сделана ошибка.
2) Укажите, как исправить ошибку – приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 

20187#20187
Требовалось написать программу, при выполнении которой с клавиатуры вводится натуральное число, не превосходящее 108, и выводится его первая (старшая) цифра. Ученик написал такую программу:
Паскаль Си
var n: longint;
begin
(*)
(1)  readln(n);
(2)  while n > 10 do begin
(3)    n := n mod 10
(4)  end;
(5)  writeln ( n )
end.
#include<stdio.h>
main(){
  int n;
(*)
(1)  scanf("%d",&n);
(2)  while (n > 10) {
(3)    n = n % 10;
(4)  }
(5)  printf("%d", n);
}
 
Последовательно выполните следующее.
1.       Напишите, что выведет эта программа при вводе числа 1984.
2.       Приведите пример числа, при вводе которого программа выдаст верный ответ.
3.       Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}

20186#20186
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа.   Программист торопился и написал программу неправильно:  
Паскаль Си
var N: longint;
    count: integer; 
begin
(*)
(1)  readln(N);
(2)  count := 1;
(3)  while N > 1 do begin
(4)    count := count + 1;
(5)    N := N div 10
(6)  end;
(7)  writeln ( count )
end.
#include<stdio.h>
main(){
  int N;
  int count;
(*)
(1)  scanf("%d",&N);
(2)  count = 1;
(3)  while (N > 1) {
(4)    count = count + 1;
(5)    N = N / 10;
(6)  }
(7)  printf("%d", count);
}
Последовательно выполните следующее:
1.       Определите, что выведет программа при вводе числа 123.
2.       Укажите одно число, для которого программа выводит неверный результат.
3.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
а)      выпишите строку, в которой сделана ошибка;
б)      укажите, как надо исправить ошибку -  приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 

20185#20185
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальную цифру этого числа. Программист торопился и написал программу неправильно:
Паскаль Си
var N: longint;
    digit, min_digit: integer; 
begin
(*)
(1)  readln(N);
(2)  min_digit := 0;
(3)  while N > 0 do begin
(4)    digit := N mod 10;
(5)    if digit > min_digit then
(6)       min_digit := digit;
(7)    N := N div 10
(8)  end;
(9)  writeln ( min_digit)
end.
#include<stdio.h>
main(){
  int N;
  int digit, min_digit ;
(*)
(1)  scanf("%d",&N);
(2)  min_digit = 0;
(3)  while (N > 0) {
(4)    digit = N % 10;
(5)    if (digit > min_digit)
(6)       min_digit = digit;
(7)    N = N / 10;
(8)  }
(9)  printf("%d", min_digit );
}
Последовательно выполните следующее:
1.       Определите, что выведет программа при вводе числа 532 (выполните устно).
2.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
а)      выпишите строку, в которой сделана ошибка;
б)      укажите, как надо исправить ошибку -  приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 

20184#20184
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится произведение цифр этого числа.   Программист торопился и написал программу неправильно:  
Паскаль Си
var N, product: longint;
    digit: integer; 
begin
(*)
(1)  readln(N);
(2)  product := N mod 10;
(3)  while N >= 10 do begin
(4)    digit := N mod 10;
(5)    product := product * digit;
(6)    N := N div 10
(7)  end;
(8)  writeln ( product )
end.
#include<stdio.h>
main(){
  int N, product;
  int digit;
(*)
(1)  scanf("%d",&N);
(2)  product = N % 10;
(3)  while (N >= 10) {
(4)    digit = N % 10;
(5)    product = product * digit;
(6)    N = N / 10;
(7)  }
(8)  printf("%d", product );
}
Последовательно выполните следующее:
1.       Определите, что выведет программа при вводе числа 532 (выполните задание устно).
2.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
а)      выпишите строку, в которой сделана ошибка;
б)      укажите, как надо исправить ошибку -  приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}

7104#7104
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 30. Напишите программу, позволяющую найти и вывести произведение элементов массива, которые имеют чётное значение и не оканчиваются на 0. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не оканчиваются на 0.

Элементы массива вводятся по одному в строке
7081#7081
Дан целочисленный массив из 30 элементов. Элементы могут принимать значения от 160 до 200 ­– рост учащихся выпускного класса. В баскетбольную команду берут тех, чей рост не менее 180 см. Опишите алгоритм, который подсчитывает и выводит минимальный рост игрока баскетбольной команды. Гарантируется, что хотя бы один ученик играет в баскетбольной команде.

Элементы массива вводятся по одному в строке
1031#1031

Для составления цепочек используются разные бусины, которые условно обозначаются цифрами 1, 2, 3, 4, 5. Каждая такая цепочка состоит из 4 бусин, при этом соблюдаются следующие правила построения цепочек:
•    На первом месте стоит одна из бусин 1, 4 или 5.
•    После четной цифры в цепочке не может идти снова четная, а после нечетной – нечетная.
•    Последней цифрой не может быть цифра 3.
Какая из перечисленных цепочек создана по этим правилам?   

Ответ: 1) 4325 2)4123 3)1241 4)3452

610#610

Вася забыл пароль к Windows XP, но помнил алгоритм его получения из строки подсказки «23ABN12QR8N»: если последовательности символов «AB» и «QR» поменять местами, а затем из получившейся строки удалить все символы «N», то полученная последовательность и будет паролем. Определите пароль:

Ответ: 1) 23AB12QR8 2)23QR12AB8 3)23QRAB8 4)23QR128

609#609

Вася забыл пароль к Windows XP, но помнил алгоритм его получения из строки подсказки «B265C42GC4»: если все последовательности символов «C4» заменить на «F16», а затем из получившейся строки удалить все трехзначные числа, то полученная последовательность и будет паролем. Определите пароль:

Ответ: 1) BFGF16 2)BF42GF16 3)BFGF4 4)BF16GF

220#220

При составлении расписания на вторник учителя высказали свои пожелания по поводу расположения первых пяти уроков. Учитель математики (М) хочет иметь первый или второй урок, учитель физика (Ф) – второй или третий, учитель информатики (И) – первый или четвертый, учитель биологии (Б) – третий или четвертый. Какое расписание устроит всех учителей?

1) ИМБФ                2) МИФБ                   3) МФБИ                   4) МБФИ
Поделиться
Класснуть