1

2 次元マトリックスのサドル ポイントを見つけ、ポインターを使用してマトリックスを参照しようとしていますが、コードが意図したとおりに実行されません。

ここに私のコードがあります

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, m, i, j;
    int small, smallcol, large, largerow;

    scanf("%d%d", &n, &m);  // n is row, m is column
    int a[n][m];
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }

    int* p[n];

    for (i = 0; i < n; i++)
    {
        p[i] = a[i];
    }

    for (i = 0; i < n; i++)
    {
        small = *p[I];
        smallcol = 0;
        ;
        for (j = 1; j < m; j++)
        {
            if (*(p[i] + j) > small)
            {
                small = *(p[i] + j);
            }
        }
        large = *(p[0] + smallcol);
        largerow = 0;
        for (j = 1; j < n; j++)
        {
            if (*(p[j] + smallcol) > large)
            {
                large = *(p[j] + smallcol);
                largerow = j;
            }
        }

        if (i == largerow)
        {
            printf("%d", *(p[i] + smallcol));
        }
        if (i != largerow)
        {
            printf(" ");
        }
    }

    return 0;
}

ここに画像の説明を入力

この図は入力 (3x3 マトリックス) を示しており、マトリックスに鞍点がないため、出力は 8 ではなく空白である必要があります。コードの何が問題なのかわからない

編集:新しい問題に遭遇しました。テスト ケースの 1 つには、次のような入力があります。

(3x4) マトリックス、無関係-1-5、右側の最後の列に:

入力:

-1 -2 -1  3 -1
-3 -5  2  3 -5
 0  0  0  1

出力:-2

期待される出力は です0

このテスト ケースでは、-1-5は、列数を超える余分な入力です。それらは null と見なされるべきですが、この場合はそうではありません。

4

1 に答える 1