鞍点计算

来源:互联网 发布:检测到usb端口潮湿 编辑:程序博客网 时间:2024/05/20 01:13

鞍点计算
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description

找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。同一行和同一列没有相同的数。
Input

输入数据有多行,第一行有两个数m和n,下面有m行,每行有n个数。
Output

按下列格式输出鞍点:

Array[i][j]=x

其中,x代表鞍点,i和j为鞍点所在的数组行和列下标,我们规定数组下标从0开始。

一个二维数组并不一定存在鞍点,此时请输出None。

我们保证不会出现两个鞍点的情况,比如:

3 3
1 2 3
1 2 3
3 6 8
Example Input

3 3
1 2 3
4 5 6
7 8 9

Example Output

Array[0][2]=3

Hint
Author

#include<stdio.h>#include<stdlib.h>int main(){    int n,m,i,j,k,max,min,x,y;//x,y标记鞍点下标    while(~scanf("%d %d",&m,&n))    {        int a[20][20],flag = 0;        for(i = 0;i < m;i++)        {            for(j = 0;j < n;j++)            {                scanf("%d",&a[i][j]);            }        }        for(i = 0;i < m;i++)        {             max = 0;//每找一列的最大最小值都得重新初始化;            for(j = 0;j < n;j++)//找这一行的最大值            {                if(a[i][j] > max)                {                    max = a[i][j];                    x = i;                    min = 999999;//要找到最小值,必须把min初始值尽可能设置的大一些;                    for(k = 0;k < m;k++)//找这一列的最小值;                    {                        if(a[k][j] < min)                        {                             min = a[k][j];                             y = j;                        }                    }                }            }            if(max==min)            {                flag = 1;                break;//题目保证不会有两个鞍点;            }        }        if(flag==1)        {            printf("Array[%d][%d]=%d\n",x,y,a[x][y]);        }        else printf("None\n");    }    return 0;}
原创粉丝点击