Латинский Квадрат

Тема в разделе "C/C++/C#", создана пользователем KOMPNET, 27 ноя 2011.

Статус темы:
Закрыта.
  1. KOMPNET

    KOMPNET Гость

    Латинский квадрат. Латинским квадратом пордка n называется квадратная таблица размером nxn каждая строка и каждый столбец которой содержит все числа от 1 до n. Проверить является ли заданная целочисленная матрица латинским квадратом. Я так понимаю в этой задаче три этапа: проверка введенных данных (действительно ли квадрат), действительно ли числа в матрице от 1 до n, сравнение элементов строк и столбцов чтобы они не были равны. Но как это реализовать, вообще массивы плохо понимаю, а задачу нужно сделать...
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    не мог бы ты пояснить условие.
    как собственно задаётся матрица?
    считываешь с файла,пользователь сам вводит её размерность и элементы,вводит тоько размерность или как по другому?
     
  3. KOMPNET

    KOMPNET Гость

    Пользователь вводит сам матрицу, предварительно введя размерность N
     
  4. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    что за N?
     
  5. KOMPNET

    KOMPNET Гость

    Ну матрица квадратная, N кол-во строк и столбцов
     
  6. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Тогда первый этап уберается
     
  7. KOMPNET

    KOMPNET Гость

    Ну да в принципе, но как делать помоги пожалуйста
     
  8. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Суть в том что тебе нужно посчиитать произведение каждой строки и каждого столбца
    они все должны равняться n!(от 1 до n идут числа)

    Добавлено: +к этому надо ввести прверку на число 1


    пример
    1 2 3
    3 1 2
    2 3 1

    1 1 6
    6 1 1
    1 6 1


    понятно?
     
  9. KOMPNET

    KOMPNET Гость

    Второй пример не правильный, числа должны быть от 1 до n Если матрица размером 3на 3 то и числа в ней 123

    Добавлено:
    Код (C++):
    #include <stdio.h>
    #include <conio.h>
    void main()
    { int n,j,i;
    int A[100][100];
    printf("Vvedite razmer massiva n: ");
    scanf("%d",&n);
    printf("Vvedite elementy massiva\n");
    for (i=0; j<n; i++)
    for (j=0; j<n; j++)
    scanf("%d",A[i][j]);
    вот мое начало помоги с продолжением
     
  10. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    :facepalm:

    я её специально написал показывая что в ней призведение = 6 во всех строках и столбцах,но там по две 1
    тебе нужно проверку написать на единицы
     
  11. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Код (C++):
    int i(0),j,s,p,fact(1);
    while(i!=n)
    {
    fact=i*fact;
    i++;
    }
    for(j=0;j<N;j++)
    {
    s=1;p=0;
    for(i=0;i<N;i++)
    {
    p=A[j][i];
    s=p*s;
    }
    if(s!=fact)
    cout<<"Ne latinski kvadr";
    break;
    }
    вот проверка произведений на единицы проверку сам напишешь
     
  12. KOMPNET

    KOMPNET Гость

    Что все равно не работает
     
  13. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    в каком месте не работает?
     
  14. KOMPNET

    KOMPNET Гость

    Она всё время выводит: квадрат не латинский
     
  15. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    а сам не нашёл??


    просто строки поменяй в факториале:
    while(i!=n)
    {
    i++;
    fact=i*fact;
    }
     
  16. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Whatka
    ваше решение не верное
    а еще проверку на двойки, тройки и т.п. :facepalm:
    За задачу спасибо, загружу студентов )
     
  17. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    нет всё правильно
    надо проверять произведения
    +
    какое-то условие (доплнительно) :facepalm: условие на повторяющиеся цифры для каждой строки наверно

    для каждой т.к.

    1 2 3 4
    1 3 4 2
    1 4 2 3
    24 1 1 1
     
  18. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Whatka
    если в строке четное число отрицательных чисел - то квадрат полюбому не латинский, но ваша программа и тут сбой даст.
    А так-то да, ваш алгоритм спасает то, что по условию матрица целочисленная
    но вам не кажется что проще в каждом столбце и каждой строке последовательно искать числа от 1 до n чем произведение, и еще выполнять кучу проверок.

    Замечу, что поиск повторяющихся чисел это весьма трудоемкий процесс ))
     
  19. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Соглашусь,что куча проверок и подсчёт произведения трудоёмкий процесс

    но мне кажется для решения этой задачи существует более простой и короткий
    способ чем в каждом столбце и каждой строке последовательно искать числа от 1 до n.
     
  20. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Whatka
    есть подозрение что достаточно проверять сумму и произведение :angry2:
    типа A*B = C*D, A+B = C+D <=> A=C, B=D ИЛИ A=D, B=C
    вроде бы
     
Загрузка...
Похожие Темы - Латинский Квадрат
  1. Nigrum-papilio
    Ответов:
    1
    Просмотров:
    1.478
  2. natasha777
    Ответов:
    5
    Просмотров:
    2.189
  3. allexey
    Ответов:
    0
    Просмотров:
    1.581
  4. kisslata
    Ответов:
    7
    Просмотров:
    2.194
  5. Монопо
    Ответов:
    0
    Просмотров:
    2.017
Статус темы:
Закрыта.

Поделиться этой страницей