Загрузка...

Помогите с задачкой на Си, пожалуйста.

Тема в разделе C/C++ создана пользователем zerro5 16 ноя 2021. 215 просмотров

  1. zerro5
    zerro5 Автор темы 16 ноя 2021 4 14 июн 2019
    Элемент матрицы назовем седловой точкой, если он является наименьшим в своей строке и наибольшим в своем столбце. Для заданной целочисленной матрицы вывести индексы всех ее седловых точек.
     
  2. Daemon
    Daemon 16 ноя 2021 1680 8 янв 2021
    1. Посмотреть предыдущие комментарии (1)
    2. Daemon
      CarryDieOn, извините, но гений здесь только автор темы
    3. CarryDieOn
      Daemon, полностью согласен
    4. zerro5 Автор темы
      Daemon, Мужик, мне надо на Си, а не на С++.
    5. Посмотреть следующие комментарии (2)
  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 Автор темы 16 ноя 2021 4 14 июн 2019
    Всем спасибо за помощь
     
Top
Загрузка...