0 / 0 / 0
Регистрация: 28.03.2018
Сообщений: 14
1

Массив: Заполнить таблицу так, чтобы повторов не было в столбцах, строках и на главной диагонали

12.04.2020, 04:20. Показов 1961. Ответов 4
Метки нет (Все метки)

Помогите, пожалуйста, решить задачу
Необходимо заполнить таблицу 9х9 случайными числами от 0 до 15 так, чтобы повторов не было в столбцах, строках и на главной диагонали. Результат вывести в StringGrid
Попытался что-то сделать сам, но не особо получилось

Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var i,j,n,m,l,a1,a2,a3: integer;
begin
a1:=1;a2:=1;a3:=1;
  for i := 0 to 8 do  begin
 for j := 0 to 8 do  begin
  with StringGrid1 do
  begin
  colcount:=9; rowcount:=9;
    repeat
    a1:=0; a2:=0; a3:=0;
    Randomize;
    Cells[i,j]:=IntToStr(Random(15));
      for n := 1 to (i-1) do begin
      if Cells[n,j]=Cells[i,j] then a1:=1
      end;
      for m := 1 to (j-1) do begin
      if Cells[i,m]=Cells[i,j] then a2:=1
      end;
      if i=j then begin
      for l:= 1 to (i-1) do
      if Cells[l,l]=Cells[i,j] then a3:=1
      end;
 
    until (a1=0) and (a2=0) and (a3=0);
  end;
  end;
  end;
end;
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2020, 04:20
Ответы с готовыми решениями:

Заполнить двумерный массив 4 на 4 случайными значениями так, чтобы его элементы были симметричны главной диагонали.
Заполнить двумерный массив 4 на 4 случайными значениями так, чтобы его элементы были симметричны...

Элементы, расположеные на главной диагонали, в первых 3 строках выше диагонали и в последних 2 строках ниже диагонали переместить в одномерный массив
Нужно элементы расположены на главной диагонали, в первых 3 строках выше диагонали и в последних 2...

Заполнить таблицу элементами так, чтобы они не повторялись по диагонали, горизонтали и вертикали
2 задача во вложениях, можете подсказать алгоритм или метод как это сделать? Пытался сам...

Заполнить матрицу заданного размера числами 1,2,3,4 так, чтобы по горизонтали, вертикали и диагонали не было одинаковых рядом стоящих чисел.
Заполнить матрицу заданного размера M(k,l) числами 1,2,3,4 так, чтобы по горизонтали, вертикали и...

4
4595 / 3817 / 979
Регистрация: 29.08.2013
Сообщений: 24,650
Записей в блоге: 3
12.04.2020, 13:13 2
не очень понятен алгоритм
заведи себе массив от 0 до 15
выпало случайное число - проверяешь нет ли его в массиве, если нет - пишешь в грид, если есть - перекидываешь
0
503 / 403 / 262
Регистрация: 05.04.2013
Сообщений: 1,824
13.04.2020, 07:59 3
Лучший ответ Сообщение было отмечено Daylikor как решение

Решение

Цитата Сообщение от qwertehok Посмотреть сообщение
выпало случайное число - проверяешь нет ли его в массиве, если нет - пишешь в грид, если есть - перекидываешь
проблема в том, что это проканало бы если массив был бы 4х4, но 9х9 там полюбому будут числа повторяться, но другой вопрос, чтобы эти повторные не оказались на в одной строке/столбце/главной диагонали

Я уже писал кому-то код, только через поиск трудно найти, потому что народ название темы не всегда умеет правильно написать. Хорошо что проект не удалил....

Daylikor,
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var
a :  array of array of integer;
i,j,k,n: Integer;
dubl : boolean;
begin
n := SpinEdit1.Value;
  sg.ColCount := n;
  sg.RowCount := n;
  SetLength(a, n, n);
randomize;
for i := 0 to n-1 do begin
for j := 0 to n-1 do begin
    dubl := false;
    While (dubl = false) do BEGIN
          dubl := true;
          a[i,j] := 1 + Random(50);
          //проверка i-ой строки
          for k := 0 to j-1 do if a[i,j] = a[i,k] then dubl := false;
          //проверка j-ого столбца
          for k := 0 to i-1 do if a[i,j] = a[k,j] then dubl := false;
          //проверка i-ой строки и j-ого столбца по главной диагонали
          if i=j then for k := 0 to j-1 do if a[i,j] = a[k,k] then dubl := false;
    END;
end;
end;
 
for i := 0 to n-1 do
for j := 0 to n-1 do
    sg.Cells[j,i] := IntToStr(a[i,j]);
 
end;
Миниатюры
Массив: Заполнить таблицу так, чтобы повторов не было в столбцах, строках и на главной диагонали  
3
2728 / 1425 / 575
Регистрация: 19.03.2019
Сообщений: 4,747
13.04.2020, 12:40 4
Цитата Сообщение от AHBAR Посмотреть сообщение
Delphi
1
While (dubl = false) do BEGIN
красивее так
Delphi
1
While Not dubl do BEGIN
1
503 / 403 / 262
Регистрация: 05.04.2013
Сообщений: 1,824
14.04.2020, 05:22 5
Daylikor, в моем коде нужно изменить 17 строку по условие ВАШЕЙ задачи
Delphi
1
a[i,j] := Random(16); //0...15
Цитата Сообщение от Daylikor Посмотреть сообщение
случайными числами от 0 до 15
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2020, 05:22
Помогаю со студенческими работами здесь

Заполнить массив так, чтобы в каждой строке и каждом столбце не было повторяющихся элементов
Есть матрица NxN (N<=10). Требуется заполнить массив так, чтобы в каждой строке и каждом столбце не...

Заполнить массив случайным образом 0 и 1 так, чтобы кол-во единиц было больше количества нулей
Добрый вечер, ребят. Помогите, пожалуйста, решить задачу на C#. Буду очень благодарен! Задача:...

Заполнить квадратный массив так, чтобы его элементы имели значения, симметричные относительно главной и побочн
Помогите решить задачку плизз Заполнить квадратный массив размером nхn таким образом, чтобы:...

Как создать и заполнить двумерный массив, в строках которого числа, а в столбцах - текст?
Скажите, пожалуйста, как создать и заполнить двумерный массив ,в строках которого будут числа, а в...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru