矩阵鞍点代码

版权声明:本文为博主原创文章,请勿转载。 https://blog.csdn.net/Neil_Wesley/article/details/51500896

一、什么是鞍点呢?

在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。

二、代码实现

1、方法一:

方法一:
//  Created by Neil Wesley on 16/5/25.
//  Copyright © 2016年 Neil Wesley. All rights reserved.
//

#include "stdio.h"
int main()
{
    int a[4][4],i,j,k;
    printf("Please input array a:");
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            scanf("%d",&a[i][j]);
    printf("\n your array is:");
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
        {
            printf("%d\t",a[i][j]);
            printf("\n");
        }
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
        {
            for(k=0;k<4;k++)
            {
                if(a[i][j]>=a[i][k]&&a[i][j]<=a[k][j])
                    continue;      
                else       
                    break;
            }
            if(k==4)      
                printf("a[%d][%d]=%d\n",i,j,a[i][j]);
        }
}

2、方法二:

方法二:
//  Created by Neil Wesley on 16/5/25.
//  Copyright © 2016年 Neil Wesley. All rights reserved.
//

#include "stdio.h"
int main()
{
    int a[4][5],i,j,n,m;
    for(i=0;i<4;i++)
        for(j=0;j<5;j++)
            scanf("%d",&a[i][j]);
    for(i=0;i<4;i++)
        for(j=0;j<5;j++)
        {
            for(m=0;m<5;m++)
            {
                if(a[i][j]>=a[i][m])
                    continue;
                else
                    break;
            }
            if(m==5)
            {
                for(n=0;n<4;n++)
                {
                    if(a[i][j]<=a[n][j])       
                        continue;      
                    else       
                        break;
                }
                if(n==4)      
                    printf("%3d",a[i][j]);
            }
        }
}

3、方法三:

方法三:
void main()
{
    int i,j,k,a[N][M],max,maxj,flag;
    printf("输入数组:\n");
    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];              //*开始时假设a[i][0]最大
        maxj=0;                   //*将列号0赋值给maxj保存
        for(j=0;j<M;j++)          //*找出第i行中的最大数
        if(a[i][j]>max)
        {
            max=a[i][j];         //*将本行的最大数保存在max中
            maxj=j;              //*将最大数所在的列号保存在maxj中
        }
        flag=1;                  //*先假设是鞍点,用flag为1代表
        for(k=0;k<N;k++)
        if(max>a[k][maxj])       //*将最大数和其同列元素相比
        {
            flag=0;              //*如果max不是同列最小,表示不是鞍点,令flag=0
            continue;
        }
        if(flag)                 //*如果flag为1表示是鞍点
        {
            printf("a[%d][%d]=%d\n",i,maxj,max);     //*输出鞍点值和所在行号列号
            break;
        }
    }
    if(!flag)                    //*如果flag为0表示鞍点不存在
    printf("鞍数不存在!");
}


猜你喜欢

转载自blog.csdn.net/Neil_Wesley/article/details/51500896
今日推荐