1-11 класс
  • 1-11 класс
  • 1 класс
  • 2 класс
  • 3 класс
  • 4 класс
  • 5 класс
  • 6 класс
  • 7 класс
  • 8 класс
  • 9 класс
  • 10 класс
  • 11 класс
Выберите класс
Предметы
Семакин
Работа 3.7 Упр.31 ГДЗ Семакин 10 класс (Информатика)
Семакин, Хеннер, Шеина
10 класс
Автор
Семакин, Хеннер, Шеина

Работа 3.7 Упр.31 ГДЗ Семакин 10 класс (Информатика)

Задача

Рассмотрим вариант решения задания из учебника Семакин, Хеннер, Шеина 10 класс, Бином: 31. Подсчитать количество строк заданной целочисленной матрицы N х N, являющихся перестановкой чисел 1, 2, …, N (т. е. содержащих каждое из чисел 1, 2, …, N ровно один раз).

Подробный ответ

Нужно просмотреть каждую строку матрицы и проверить, является ли она перестановкой чисел $$1,2,\dots,N$$. Это значит, что в строке должны встретиться все числа от $$1$$ до $$N$$ ровно по одному разу.

Удобно для каждой строки завести признак flag. Сначала считаем, что строка подходит, затем проверяем все числа:

  • если какое-то число выходит за пределы $$1..N$$, строка не подходит;
  • если число повторяется, строка тоже не подходит;
  • если все числа от $$1$$ до $$N$$ встретились ровно один раз, увеличиваем счётчик подходящих строк.

В приведённом решении матрица сначала заполняется случайными числами, а затем для каждой строки проверяется условие равенства соседних элементов. Однако для задачи о перестановке этого недостаточно: нужно проверять именно наличие всех чисел от $$1$$ до $$N$$ без повторений.

Правильный вариант программы на Pascal:

var
  a: array[1..100,1..100] of integer;
  i, j, n, k: integer;
  used: array[1..100] of boolean;
  flag: boolean;
begin
  readln(n);
  for i := 1 to n do
    for j := 1 to n do
      read(a[i, j]);

  k := 0;
  for i := 1 to n do
  begin
    for j := 1 to n do
      used[j] := false;
    flag := true;
    for j := 1 to n do
    begin
      if (a[i, j] < 1) or (a[i, j] > n) or used[a[i, j]] then
        flag := false
      else
        used[a[i, j]] := true;
    end;
    if flag then
      k := k + 1;
  end;
  writeln(k);
end.

В этой программе массив used отмечает, какие числа уже встретились в текущей строке. Если число повторилось или вышло за пределы $$1..N$$, строка сразу считается неподходящей.

Ответ

Нужно подсчитать количество строк матрицы, в которых каждое число из $$1$$, $$2$$, …, $$N$$ встречается ровно один раз. Для этого в каждой строке проверяют диапазон значений и отсутствие повторов.



Общая оценка
3.7 / 5
Другие учебники
Другие предметы