注册 登录
编程论坛 C语言论坛

怎么求x*x方格内一个点的坐标?

AbduRahman1 发布于 2021-12-19 20:03, 1573 次点击
Description
有一次,苏轼在西湖钓鱼时遇到了一位正在钓鱼的老叟,可是他发现老叟的钓鱼竿上并没有钩子,苏轼感到非常奇怪,正当他想问老叟的时候,老叟丢给了他一张图纸,说:“传闻此湖中有一个宝藏,今日见你有缘,就把这藏宝图赠与你罢”,说完扬长而去。

 苏轼打开藏宝图,上面写着“东西最浅,且南北最深处”,意思就是埋藏宝物的点在所在的同一水平线上水深是最浅的,同时在所在的同一竖直线上是最深的,后面是西湖的水深地形图。

你可否帮助苏轼找到此宝藏呢?

Input
只有一组输入

第一行输入n,m(1<=n,m<=100),分别表示西湖的南北方向长度和东西方向长度

接下来n行每行输入m个数据,表示各坐标的湖水水深

保证每组数据有且只有一个这样的点,且每处水深不同

Output
输出宝藏坐标

Samples
input
3 3
1 2 3
4 5 6
7 8 9
output
(3,1)
input
3 3
1 2 3
7 8 9
5 4 6
output
(2,1)
input
3 3
9 10 3
8 12 7
11 4 5
output
(2,3)
input
4 4
24 31 52 61
20 75 11 32
22 72 44 65
12 5 108 33
output
(1,1)
2 回复
#2
rjsp2021-12-20 09:15
保证每组数据有且只有一个这样的点,且每处水深不同
赞一下,虽然是最低要求的严谨,但之前同样的题目很少见

程序代码:
#include <stdio.h>
#include <stdbool.h>

int main( void )
{
    // 输入
    unsigned n, m, dp[100][100];
    scanf( "%u%u", &n, &m );
    for( unsigned r=0; r!=n; ++r )
        for( unsigned c=0; c!=m; ++c )
            scanf( "%u", &dp[r][c] );

    // 计算
    for( unsigned r=0; r!=n; ++r )
    {
        // 找出第r行最小值所在的列
        unsigned idx_c = 0;
        for( unsigned c=1; c!=m; ++c )
            if( dp[r][c] < dp[r][idx_c] )
                idx_c = c;
        // 然后判断第idx_c列最大值所在的行是不是第r行
        bool ok = true;
        for( unsigned i=0; ok && i!=n; ++i )
            if( dp[i][idx_c] > dp[r][idx_c] )
                ok = false;
        if( ok )
        {
            printf( "(%u,%u)\n", r+1, idx_c+1 );
            break;
        }
        // 以上可以缓存下来以提供效率,但数据太少,所以意义不大
    }
}
#3
AbduRahman12021-12-22 19:17
回复 2楼 rjsp
非常的感谢!感谢备注!
1