Загрузка...

Help with a problem in C, please.

Thread in C/C++ created by zerro5 Nov 16, 2021. 216 views

  1. zerro5
    zerro5 Topic starter Nov 16, 2021 4 Jun 14, 2019
    Элемент матрицы назовем седловой точкой, если он является наименьшим в своей строке и наибольшим в своем столбце. Для заданной целочисленной матрицы вывести индексы всех ее седловых точек.
     
  2. Daemon
    Daemon Nov 16, 2021 1680 Jan 8, 2021
    1. View previous comments (3)
    2. zerro5 Topic starter
      Daemon, Мужик, мне надо на Си, а не на С++.
    3. Daemon
      zerro5, просто заменить операторы cout, cin на pfintf, scanf_s - это сложность для вас?
    4. zerro5 Topic starter
      Daemon, Спасибо, теперь для меня это не сложно.
  3. Sullyface
    const
    n = 4;
    m = 6;

    var
    a: array[1..n, 1..m] of integer; // основной массив
    Rext: array[1..n, 1..2] of integer; // номера столбцов с min и max в строках
    Cext: array[1..2, 1..m] of integer; // номера строк с min и max в столбцах
    i, j, amin, amax: integer;

    begin
    // заполняем массив А случайными числами
    Randomize;
    writeln('Исходный массив');
    for i := 1 to n do
    begin
    for j := 1 to m do
    begin
    a[i, j] := random(100) - 50;
    write(a[i, j]:4);
    end;
    writeln;
    end;
    // Заполняем массив Rext n x 2
    for i := 1 to n do
    begin
    amin := 10000; //заведомо больше a[i,j]
    amax := -10000; //заведомо меньше a[i,j]
    for j := 1 to m do
    begin
    if amin > a[i, j] then begin
    amin := a[i, j]; Rext[i, 1] := j
    end;
    if amax < a[i, j] then begin
    amax := a[i, j]; Rext[i, 2] := j
    end
    end;
    end;
    // Заполняем массив Cext 2 x m
    for j := 1 to m do
    begin
    amin := 10000; //заведомо больше a[i,j]
    amax := -10000; //заведомо меньше a[i,j]
    for i := 1 to n do
    begin
    if amin > a[i, j] then begin
    amin := a[i, j]; Cext[1, j] := i
    end;
    if amax < a[i, j] then begin
    amax := a[i, j]; Cext[2, j] := i
    end
    end
    end;
    writeln;
    // Ищем седловые точки
    writeln('*** Седловые точки ***');
    for i := 1 to n do
    begin
    j := Rext[i, 1];
    if Cext[2, j] = i then
    write('[', i, ',', j, '] ')
    else begin
    j := Rext[i, 2];
    if Cext[1, j] = i then
    write('[', i, ',', j, '] ')
    end
    end;
    writeln
    end.

    Тестовое решение:

    Исходный массив
    35 34 -17 -33 20 -29
    -8 -31 -4 -20 8 -1
    -39 -7 -12 27 42 9
    32 13 -17 37 19 -24

    *** Седловые точки ***
    [2,5]
     
    1. sikatorr
      Sullyface, так это же паскаль...
  4. zerro5
    zerro5 Topic starter Nov 16, 2021 4 Jun 14, 2019
    Всем спасибо за помощь
     
Top
Loading...