1. 程式人生 > >尋找鞍點

尋找鞍點

尋找鞍點

題目內容:
請程式設計找出一個M*N矩陣中的鞍點,即該位置上的元素是該行上的最大值,是該列上的最小值。如果矩陣中沒有鞍點,則輸出“No saddle point!”
已知函式原型:
void FindSaddlePoint(int a[][N], int m, int n);
在該函式中輸出有無鞍點的資訊。
程式執行結果示例1:
Input m,n:
3,3↙
Input matrix:
1 2 3↙
4 5 6↙
7 8 9↙
a[0][2] is 3
程式執行結果示例2:
Input m,n:
3,4↙
Input matrix:
3 4 7 5↙
0 1 8 2↙
9 3 2 6↙
No saddle point!
輸入提示: “Input m,n:\n”
“Input matrix:\n"
輸入格式:
輸入矩陣大小: “%d,%d”
輸入矩陣元素: “%d”
輸出格式:
找到鞍點的輸出格式:“a[%d][%d] is %d\n”
沒找到鞍點的輸出格式:“No saddle point!\n”

#include <stdio.h>
#define M 100
#define N 100
void FindSaddlePoint(int a[M][N], int m, int n);
void getnumber(int a[M][N],int m,int n);
int main()
{   int a[M][N];
    int m,n;
    printf("Input m,n:\n");
    scanf("%d,%d",&m,&n);
    printf("Input matrix:\n");
    getnumber(a,m,n);
    FindSaddlePoint(a,m,n);
    return 0;
}
//找到並輸出鞍點
void FindSaddlePoint(int a[M][N], int m, int n)
{   
    int max,min,i,j,s,o;
    int b,sum=0;
    //--------------------------------
    for(j=0;j<m;j++)
    {
        max=a[j][0];            //找到第j行的最大值
        for(i=0;i<n;i++)
        {
            if(a[j][i]>max)
            max=a[j][i];
        }
    //---------------------------------
        for(o=0;o<n;o++)
        {
            if(a[j][o]==max)    //找到最大值的列
            {
                b=o;
            }    
        }
   //---------------------------------
        min=a[0][b];
        for(s=0;s<m;s++)        //找到這一列的最小值
        {
            if(a[s][b]<min)
            min=a[s][b];
        }
    //---------------------------------
        if(a[j][b]==min)        
                                    //判斷行的最大值與列的最小值是否相等
        {
            printf("a[%d][%d] is %d\n",j,b,a[j][b]);    
            sum=sum+1;
        }
    //--------------------------------------
    }
    if(sum==0)
    printf("No saddle point!\n");
}
//輸入陣列
void getnumber(int a[M][N],int m,int n)
{
    int i,l;
    for(i=0;i<m;i++)
    {
        for(l=0;l<n;l++)
        {
            scanf("%d",&a[i][l]);
        }
    }

}