我是靠谱客的博主 哭泣汽车,最近开发中收集的这篇文章主要介绍真题演练-矩阵的鞍点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:
请编程找出一个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!

解析:由于二维数组作为函数形参时,必须显示地指定数组第二维(列)的长度,因此程序在定义符号常量N时,N必须与主函数中定义的二维数组a的第二维(列)长度一致,否则将出现错误。也就是说当二维数组a的列数变化时,必须修改程序中对符号常量N的定义。为了避免这个问题,使程序能适应二维数组列数的变化,应使用二维数组的列指针(*p)作为函数形参,在主函数向其传递二维数组的第0行第0列元素的首地址(*a)
定义列指针:*p
初始化列指针:p=a[0],p=*a,p=&a[0][0](三种方式等价)

#include <stdio.h>
void FindSaddlePoint(int *a,int m,int n);
void FindSaddlePoint(int *a,int m,int n)
{
    int i,j,t,flag=0;
    int x,y,x1;
    for(i=0;i<m;i++)
    {
        x=i;
        y=0;
        for(j=0;j<n;j++)
        {
            if(a[x*n+j]>a[x*n+y])
                y=j;
        }
        x1=x;
        for(t=0;t<m;t++)
        {
            if(a[t*n+y]<a[x*n+y])
                x1=t;
        }
        if(x==x1)
        {
            flag=1;
            printf("a[%d][%d] is %d",x,y,a[x*n+y]);
        }
    }
    if(!flag)
        printf("No saddle point!");
}
int main()
{
    int m,n,i,j;
    scanf("%d %d",&m,&n);
    int a[m][n];
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    FindSaddlePoint(*a,m,n);
    //向函数传递二维数组的第0行第0列的地址
    //可替换为: FindSaddlePoint(a[0],m,n);
    //可替换为: FindSaddlePoint(&a[0][0],m,n);
}

最后

以上就是哭泣汽车为你收集整理的真题演练-矩阵的鞍点的全部内容,希望文章能够帮你解决真题演练-矩阵的鞍点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部