Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
39 / 2 / 3
Регистрация: 16.11.2015
Сообщений: 103
1

Построить матрицу, в которой сумма элементов в каждой строке, столбце и диагонали имеют одинаковую сумму

16.01.2016, 19:17. Показов 1524. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Используя рекурсивный перебор с возвратом Построить матрицу NxN, в которой сумма элементов в каждой строке, в
столбце, в каждой диагонали (их 2) имеют одинаковую сумму.
Подсказка: такая сумма может быть определена заранее и равна
Pascal
1
 n*n(n*n+1) div (2*n)
Напишите если можно только алгоритм решения.Можно и программу ,но больше нужен алгоритм
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2016, 19:17
Ответы с готовыми решениями:

Посчитать сумму элементов отдельно в каждой строке матрицы и определить номер строки, в которой эта сумма максимальна
Заполнить двумерный массив случайными числами от 10 до 100. Посчитать сумму элементов отдельно в...

Если сумма побочной диагонали матрицы имеет четное значение, найти сумму элементов в каждой строке матрицы
Если сумма побочной диагонали матрицы имеет четное значение, найти сумму элементов в каждой строке...

Найти сумму элементов в каждой строке матрицы, сумму элементов в каждом столбце, max элемент из сумм
Задан двумерный массив целых чисел размерности N на M, массив либо вводится пользователем, либо...

Подпрограмма: определить матрицу, у которой сумма элементов на главной диагонали больше
вводятся две вещественные квадратные матрицы размером М*М и N*N .для той матрицы у которой сумма...

4
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
17.01.2016, 16:31 2
Лучший ответ Сообщение было отмечено msk19 как решение

Решение

Да алгоритм, как алгоритм, особенно для "рекурсивный перебор с возвратом" (backtracking):
1. Инициализация переменных
2. Вызов рекурсивной функции для ячейки 0 (ячейка 0 - [0,0])
3. Вывод результатов.

А сама рекурсивная функция:
1. Инициализация переменных.
2. Если это для ячейки N^2 - т.е. всё уже расставлено - проверить условие для матрицы и выйти.
3. Для текущей ячейки перебирать неиспользованные числа, ставить эти числа в текущую ячейку, вызывать рекурсивную функцию для следующей ячейки.

Добавлено через 10 минут
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
type
  TMatrix = array of array of integer;
 
  function CreateMagigSquare(N: integer; var M: TMatrix): boolean;
 
  var
    MagicConstant:  integer;
    UsedNumber: array of boolean;
 
    function TestMagicSquare: boolean;
    begin
      ..........................
    end;
 
    function TestRow(Row: integer): boolean;
    var
      j: integer;
      Sum: integer;
    begin
      Sum := 0;
      for j := 0 to N - 1 do
        Sum := Sum + M[Row, j];
      TestRow := Sum = MagicConstant;
    end;
 
    function Backtracking(Cell: integer): boolean;
    var
      i, j: integer;
      k: integer;
    begin
      {если квадрат заполнен, проверяем его свойства}
      if Cell = sqr(N) then
      begin
        Backtracking := TestMagicSquare;
        Exit;
      end;
      i := Cell div N;
      j := Cell mod N;
      {для сокращения перебора, будем проверять каждую заполненную строку}
      if (i > 0) and (j = 0) then
        if not TestRow(i - 1) then
        begin
          Backtracking := False;
          Exit;
        end;
      {перебор возможных кандидатов, на место в данной ячейке}
      for k := 1 to sqr(N) do
        if not UsedNumber[k - 1] then
        begin
          UsedNumber[k - 1] := True;
          M[i, j] := k;
          Backtracking := Backtracking(Cell + 1);
          if Backtracking then
            break;
          UsedNumber[k - 1] := False;
        end;
    end;
 
  var
    i: integer;
  begin
    SetLength(UsedNumber, sqr(N));
    for i := 0 to sqr(N) - 1 do
      UsedNumber[i] := False;
    MagicConstant := (n * (sqr(n) + 1)) div 2;
    CreateMagigSquare := BackTracking(0);
  end;
1
39 / 2 / 3
Регистрация: 16.11.2015
Сообщений: 103
17.01.2016, 17:19  [ТС] 3
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
UsedNumber: array of boolean;
Может тупой вопрос ,но эта запись означает неограниченный массив ?Первый раз такое вижу
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
17.01.2016, 17:28 4
Это динамический массив. Его размер определяется в ходе выполнения программы командой SetLength.
Такого нет в TurboPascal, только в более современных компиляторах. Если страшно с ним работать, попробуйте объявить array [0..100] of boolean.

И ещё. Перебор - это очень долго. Для N=3 или N=4 за несколько секунд, а для N=5 - у меня уже минут 10 работает и ещё безрезультатно.
0
39 / 2 / 3
Регистрация: 16.11.2015
Сообщений: 103
17.01.2016, 22:31  [ТС] 5
при N=5 уже где то 2,5ч работает
0
17.01.2016, 22:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2016, 22:31
Помогаю со студенческими работами здесь

Вывести на экран ту матрицу, у которой след (сумма элементов главной диагонали) меньше.
помогите ребята.Pascal Даны две квадратные матрицы. Вывести на экран ту из них, у которой след...

В каждом 3-ем столбце заменить элементы на сумму цифр в элементе и подсчитать сумму элементов в каждой в 3-ей строке
Дана матрица M x N. В каждом 3-ем столбце заменить элементы на сумму цифр в элементе и подсчитать...

Построить матрицу, у которой элементы побочной диагонали равны суммам элементов соответствующих столбцов
Ввести квадратную матрицу D(k,k), Построить матрицу D1(k,k), у которой элементы побочной диагонали...

Получить матрицу B, элементы которой - сумма элементов матрицы A с min элементом ниже побочной диагонали
Получить новую матрицу, элементы которой есть сумма элементов данной матрицы с ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru