singlepost

Програмка по Паскалю. << На главную или назад  

Подсчитать кол-во строк целочисленной матрицы А(5,5), являющихся перестановкой чисел 1,2,3,4,5

мне последняю строка не понятна, что именно нужно сделать?
т.е. там где есть числа 1-5 переставить строки и подсчитать кол-во перестановок?

18 ответов в теме “Програмка по Паскалю.”

  1. 18
    Юля Гадалина ответил:

    дана целочисленная матрица А размером MxN, где M,N – заданные натуральные числа. Сформировать одномерный массив В, где В(j) равно сумме элементов кратных пяти и расположенных в j столбце матрицы, j=1,2…N. если таких элемнтов в j столбце нет, то элементу В(j) присвоить номер столбца. помогите мне пожалуйста!

  2. 17
    Сергей 15Сh ответил:

    верно :)
    были мысли с использованием a[mArr[i]] только я их не довёл до конца)

  3. 16
    Александр Чигринец ответил:

    Учитывая, что значения массива mArr находятся в диапазоне 1..5 проверку можно сделать компактее, по моему:

    function inArray(const mArr:TaRRR):Boolean;
    var
    i:byte;
    a:TaRRR;
    begin
    {Инициализация}
    for i:=1 to 5 do a[i]:=0;

    result:=false;
    for i:=1 to 5 do begin
    if a[mArr[i]] = 0 then a[mArr[i]] := 1
    else exit; {Повторяющееся число в массиве}
    end;
    {Массив – результат перестановки 1, 2, 3, 4, 5}
    result := true;
    end;

  4. 15
    Сергей 15Сh ответил:

    мой вариант. через функцию.
    ______________

    program Project2;

    {$APPTYPE CONSOLE}
    const
    strCnt = 5;

    type
    TaRRR = array [1..5] of Byte;

    function inArray(const mArr:TaRRR):Boolean;
    var
    i,
    j:byte;
    pr:Boolean;
    a:TaRRR;
    begin
    for i:=1 to 5 do
    a[i]:=i;

    result:=false;
    for i:=1 to 5 do
    begin
    pr:=false;
    j:=1;
    while (j<6) and not pr do //если находим вхождение – обнуляем элемент чтобы не попался второй раз.
    if mArr[i]=a[j] then
    begin
    pr:=true;
    a[j]:=0;
    end
    else
    inc(j);
    if not pr then exit;//если не нашли вхождение числа – выходим с result:=false;
    end;
    //сюда попали если все проверки(массив является перестановкой 1,2,3,4,5) завершились успешно.
    result:=true;
    end;

    var
    i,
    j,
    cnt:Word;
    a:Array[1..strCnt] of TaRRR; // массив массивов

    begin
    randomize;
    for i:=1 to strCnt do
    begin
    for j:=1 to 5 do
    begin
    a[i][j]:=random(5)+1;
    write(a[i][j]); write(' ');
    end;
    writeln;
    end;

    cnt:=0;
    for i:=1 to strCnt do
    if inArray(a[i]) then inc(cnt); // проверка является ли подмассив перестановкой 1,2,3,4,5

    write('cnt=');
    writeln(cnt);
    readln;
    end.

  5. 14
    Сергей Владимирович ответил:

    нет,я ещё к ней только подготавливаюсь, покачто остальные делаю…

  6. 13
    Сергей 15Сh ответил:

    Задача-то решена или так на рандомах и остановились?

  7. 12
    Александр Чигринец ответил:

    Может быть. Специально оговорился, что документации под рукой нет, а последний раз писал на Паскале лет… 20 тому назад.

  8. 11
    Сергей 15Сh ответил:

    Александр Чигринец, какой тип, такой и рандом.
    если в интежер пихать рандомное значение то оно и будет целочисленное. транк тут излишен ;)

  9. 10
    Александр Чигринец ответил:

    Если мне память не изменяет, то random(n) выдаёт значения от 0 до (n-1).9999 (тип real)
    Если вызывать trunc(random(5))+1, то как раз и получим числа в диапазоне 1..5
    Хотя могу и ошибаться, а справочника по Паскалю под рукой нет.

  10. 9
    Аркадий Рост ответил:

    по-моему
    m:=random(4)+1;

  11. 8
    Сергей Владимирович ответил:

    точно, чё-то ступил немного)
    задавать 25 чисел долговато, лучше сгенирировать)
    ведь чтоб сгенирировать от 1 до 5 нужно так написать
    m:=random(5)+1

  12. 7
    Александр Чигринец ответил:

    В смысле, матрицу 5х5?
    А она не из входного файла читается? Или с клавиатуры вводится? Если нет, тогда можно и так сгенерировать (только random, по моему, не целые числа выдаёт и смысла 3+2, а не 5, я тоже не понял).

  13. 6
    Александр Чигринец ответил:

    Как я понял – да, 3 строки.

  14. 5
    Сергей Владимирович ответил:

    а массив тогда задать как?
    m:=random(2+3)+1

  15. 4
    Евгений Тихонов ответил:

    Судя по ушам это квадратная матрица и в ней 5 строк ))

  16. 3
    Сергей Владимирович ответил:

    это еслиб небыло этих слов "являющихся перестановкой чисел 1,2,3,4,5"

  17. 2
    Александр Чигринец ответил:

    Из дого, что приведено в сообщении получается, что для каждой строки нужно проверить, что числа 1,2,3,4,5 там представлены все и по одному разу.

  18. 1
    Сергей Владимирович ответил:

    т.е. например
    5 4 2 1 3
    1 2 3 5 4
    4 5 3 2 1
    1 1 2 5 5
    4 5 5 1 2

    в данном случае получается 3 строки, да? или как-то подругому?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.