Задание 17

_1: Демоверсия варианта ЕГЭ по информатике 2021, ФИПИ:

Рассматривается множество целых чисел, принадлежащих числовому отрезку [1016; 7937], которые делятся на 3 и не делятся на 7, 17, 19, 27Найдите количество таких чисел и максимальное из них.
В ответе запишите два целых числа: сначала количество, затем максимальное число.

! Для выполнения этого задания можно написать программу или воспользоваться редактором электронных таблиц

  


Ответ: 1568 | 7935
 

    ✎ Решение с использованием программирования:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    var
      i, k, max: integer;
     
    begin
      k := 0;
      max := 0;
      for i := 1016 to 7937 do 
      begin
        if (i mod 3 = 0) and (i mod 7 > 0) and (i mod 17 > 0) and (i mod 19 > 0) and (i mod 27 > 0) then
        begin
          max:= i;
          inc(k);
        end;
      end;
      writeln(k, ' ', max)
    end.

    PascalABC.NET (решение со списком):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    begin            
      var l:=new List<integer>;
      for var n:=1016 to 7937 do
        if (n mod 3 = 0) and (n mod 7 <> 0) and 
           (n mod 17 <> 0) and (n mod 19 <> 0) and 
           (n mod 27 <> 0) then begin
             l.Add(n);
           end;
      print(l.Count,l.Max)
    end.

    PascalABC.NET (LINQ):

    1
    2
    3
    4
    
    begin
     var s := Range( 1017, 7937, 3).Where( i -> not i.DivsAny(7, 17, 19, 27) );
     print( s.Count, s.Max );            
    end.

    Python:

    1
    2
    3
    
    a = [n for n in range(1016,7937+1) 
         if (n%3==0 and n%7!=0 and n%17!=0 and n%19!=0 and n%27!=0)]
    print(len(a),max(a))
    Список a формируем, используя генератор списка: то есть в список попадут только те числа из диапазона [1016,7937], которые удовлетворяют всем перечисленным условиям: n%3==0 (число делится на 3), n%7!=0 (число не делится на 7) и т.п.

    C++:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    #include <iostream>
    int main()
    {
      int count = 0;
      int maxGood = 0;
      for(int n=1016; n<=7937; n++)
        if( (n % 3 == 0) and (n % 7 != 0) and 
            (n % 17 != 0) and (n % 19 != 0) and (n % 27 != 0) ) {
          maxGood = n;    
          count += 1;
          }  
      std::cout << count << " " << maxGood;
    }

    ✎ Решение с помощью Excel:

  • Первое значение диапазона введем в ячейку A1:
  • Используем прогрессию для заполнения всего диапазона числами. Для это выберите вкладку Главная и щелкните по кнопке Прогрессия:
  • Столбец B будем использовать для поиска чисел, которые делятся на 3. Для этого в ячейку B1 введите формулу с рисунка:
  • Двойным щелчком по маркеру заполнения скопируйте формулу на весь столбец:
  • Столбец С будем использовать для поиска чисел, которые НЕ делятся на 7. Для этого в ячейку С1 введите формулу с рисунка:
  • Заполните весь столбец двойным щелчком по маркеру заполнения.
  • Cтолбцы DEF таким же образом будем использовать для поиска чисел столбца А, которые не делятся на 1719 и 27
  • Для поиска всех истинных значений используем столбец G. В ячейку G1 введите функцию ЕСЛИ: если все значения ячеек в столбцах B-F в этой строке истинны, выводим число из А1, иначе – пустую строку:

  • Заполните весь столбце, используя маркер автозаполнения.

  • Ячейку H1 будем использовать для подсчета таких чисел, которые удовлетворяют всем условиям, т.е. для подсчета непустых ячеек столбца G:
  • Ячейку H2 будем использовать для подсчета такого наибольшего числа:

Работа с цифрами числа в n-й системе счисления

17_2:

Рассматривается множество целых чисел, принадлежащих числовому отрезку [3712; 8432], которые удовлетворяют следующим условиям:
− запись в двоичной и четверичной системах счисления заканчивается одинаковой цифрой;
− кратны 1314 или 15.

Найдите количество таких чисел и минимальное из них.

! Для выполнения этого задания можно написать программу или воспользоваться редактором электронных таблиц

  
Типовые задания для тренировки


✎ Решение с использованием программирования:

Паскаль:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
 var k, n, min:integer;
 
begin
  k:=0; min:=8433;
  for n:= 3712 to 8432 do
    if (n mod 2 = n mod 4) and ((n mod 13=0) or (n mod 14=0) or (n mod 15=0)) then
      begin
        if min>n then
        min:=n;
        k:=k+1;
      end;
      Writeln (k,' ',min);
End.

PascalABC.NET (со списком):

1
2
3
4
5
6
7
8
9
begin
  var l := new List<integer>;
  for var n := 3712 to 8432 do
    if (n mod 2 = n mod 4) and ((n.divs(13)) or (n.divs(14)) or (n.divs(15))) then
    begin
      l.add(n)
    end;
  print(l.Count, l.Min)
end.

PascalABC.NET (запросы LINQ):

1
2
3
4
5
6
7
begin
 var s := Range( 3712, 8432)
   .Where(i -> ((i mod 13=0) or (i mod 14=0) or (i mod 15=0)) and (i mod 2 = i mod 4));
    // или: .Where( i -> (i.DivsAny(13,14,15)) and (i mod 2 = i mod 4));
 s.Count.Print;
 s.Min.Print;  
end.

Python:

1
2
L = [x for x in range(3712, 8432+1) if (x % 13 == 0 or x % 14 == 0 or x % 15 == 0) and ( x % 2 == x % 4)]
print(len(L),' ',L[0])
Формируем список (массив) L только из подходящих элементов, то есть удовлетворяющих всем, перечисленным в задании, условиям. Затем выводим длину списка (len(L)), т.е. найденное количество таких чисел, и нулевой элемент, он же минимальный, поскольку числа упорядочены по возрастанию (L[0])

C++:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
int main()
{
	int count = 0;
	int min = 8433;
	for (int n = 3712; n <= 8432; n++)
		if (((n % 2 == n % 4) && ((n % 13 == 0) || (n % 14 == 0) || (n % 15 == 0))) )
		{
			if (n < min) min = n;
			count += 1;
		}
	std::cout << count << " " << min;
}

✎ Решение с помощью Excel:

  • Первое значение диапазона введем в ячейку A1:
  • Используем прогрессию для заполнения всего диапазона числами. Для это выберите вкладку Главная и щелкните по кнопке Прогрессия:
  • Столбец B будем использовать для поиска чисел, которые кратны 13, 14 или 15. Для этого в ячейку B1 введите формулу с рисунка:
  • Двойным щелчком по маркеру заполнения скопируйте формулу на весь столбец:
  • Столбец С будем использовать для поиска чисел, запись которых в двоичной и четверичной системах счисления заканчивается одинаковой цифрой. Для этого в ячейку С1 введите формулу с рисунка:
  • Заполните весь столбец двойным щелчком по маркеру заполнения.
  • Для поиска всех истинных значений используем столбец D. В ячейку D1 введите функцию ЕСЛИ: если все значения ячеек в столбцах B, C в этой строке истинны, выводим число из А1, иначе – пустую строку:
  • Заполните весь столбце, используя маркер автозаполнения.
  • Ячейку E1 будем использовать для подсчета таких чисел, которые удовлетворяют всем условиям, т.е. для подсчета непустых ячеек столбца D:
  • Ячейку E2 будем использовать для подсчета такого наименьшего числа (или просмотрите столбец D визуально и найдите первое значение):

  • 17_3:

    Рассматривается множество целых чисел, принадлежащих числовому отрезку [1000; 9999], запись которых в пятеричной системе имеет не менее 6 цифр и заканчивается на 21 или 23.

    Найдите количество таких чисел и минимальное из них.

    ! Для выполнения этого задания можно написать программу или воспользоваться редактором электронных таблиц

      

    Ответ: 550   3136

    Комментарии