OpenJudge计算概论-计算鞍点

/*========================================================================
计算鞍点
总时间限制:    1000ms  内存限制:    65536kB
描述
    输入一个二维 (5*5)数组,每行只有一个最大值,每列只有一个最小值。
    如果存在鞍点,则输出鞍点所在的位置(行和列),不存在鞍点时,要输出“not found”。
    鞍点指的是数组中的一个元素,它是所在行的最大值,并且是所在列的最小值。
    例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
    11 3 5 6 9
    12 4 7 8 10
    10 5 6 9 11
    8 6 4 7 2
    15 10 11 20 25
输入
    输入包含一个5行5列的矩阵
输出
    如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"
样例输入

    11 3 5 6 9
    12 4 7 8 10
    10 5 6 9 11
    8  6 4 7 2
    15 10 11 20 25
样例输出
    4 1 8
==========================================================================*/
#include<stdio.h>
#define maxN  50
#define maxM  50
int main()
{
    int n,m,i,j,k;
    int a[maxN][maxM]={0};
    int max,x,y;
    int flag;
    freopen("5.in","r",stdin);
    n=5;
    m=5;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<n;i++)
    {
        max=a[i][0];//假定行的第一个元素是该行最大值 
        x=i;//记录最大值所在的行列坐标 
        y=0;
        for(j=1;j<m;j++)//寻找行的最大值 
        {
            if(a[i][j]>max)
            {
                max=a[i][j];
                y=j;
            }
        }
        flag=1;
        for(k=0;k<n;k++)//检测刚刚找到行最大值max是否是其所在的第y列的最小值 
        {
            if(a[k][y]<max)
            {
                flag=0;//flag为0表示max不是第y列的最小值 
                break;
            }
        }
        if(flag==1)//flag为1表示max是第y列的最小值,即找到了鞍点,可以输出了  
        {
            printf("%d %d %d
",x+1,y+1,max);
            break;//最多只有一个鞍点,所以可以结束查找鞍点的工作了 
        }
    }
    if(flag==0)//假如刚才没找到鞍点,说明该数组不存在鞍点。 
        printf("not found
");
    return 0;
}
 1 #include <stdio.h>
 2 #define maxN 5
 3 struct obj
 4 {
 5     int maxOrMinNumber;
 6     int index;
 7 };
 8 int main(int argc, char *argv[])
 9 {
10     int n=maxN,i,j,t;
11     struct obj rowMaxIndex[maxN];
12     struct obj colMinIndex[maxN];
13     int k,flag;
14     
15     for(i=0;i<maxN;i++)
16     {
17         rowMaxIndex[i].index=0;
18         colMinIndex[i].index=0;
19     }
20     for(i=0;i<maxN;i++)
21     {
22         for(j=0;j<maxN;j++)
23         {
24             scanf("%d",&t); //输入a[i][j] 
25             if(j==0)  // 更新第i行最大值和最大值所在列下标 
26             {
27                 rowMaxIndex[i].maxOrMinNumber=t;
28                 rowMaxIndex[i].index=0;
29             }
30             else if(t>rowMaxIndex[i].maxOrMinNumber)
31             {
32                 rowMaxIndex[i].maxOrMinNumber=t;
33                 rowMaxIndex[i].index=j;
34             }
35             
36             if(i==0)//更新第j列最小值和最小值所在行的下标 
37             {
38                 colMinIndex[j].maxOrMinNumber=t;
39                 colMinIndex[j].index=0;
40             }
41             else if(t<colMinIndex[j].maxOrMinNumber)
42             {
43                 colMinIndex[j].maxOrMinNumber=t;
44                 colMinIndex[j].index=i;
45             }
46         }
47     }
48     
49     flag=0;
50     for(i=0;i<maxN;i++)
51     {
52         k=rowMaxIndex[i].index;//第i行最大值的列下标 
53         if(colMinIndex[k].index==i)
54         {
55             printf("%d %d %d
",i+1,k+1,rowMaxIndex[i].maxOrMinNumber);
56             flag=1;
57             break;
58         }
59     }
60     if(flag==0) printf("not found
");
61     return 0;
62 }
View Code
原文地址:https://www.cnblogs.com/huashanqingzhu/p/3481136.html