计算鞍点C语言题目,最详细的注释,看不懂你来打我

描述

给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。    例如:在下面的例子中(第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>
int main()
{
	int a[5][5];      
	int i,j,k;
	for(i=0;i<5;i++){
		for(j=0;j<5;j++){
			scanf("%d",&a[i][j]);		//输入一个5乘5的矩阵 
		}
	}
	int cent=0,bent=0,sum=0;   //cent用于记录a[i][j]大于等于同行其他数的次数,bent则是列 
	int *p=&cent;		       //sum用于判断有没有鞍点,初始为0,有则为1再后面判断 
	int *q=&bent;              //这里定义2个指针用来每一次循环开始时定义cent和bent为0 
	for(i=0;i<5;i++){          //从第一行开始遍历 
		for(j=0;j<5;j++){      //遍历每一行的每一列元素 
			*p=0,*q=0;         //初始cent和bent为0 
			for(k=0;k<5;k++){  
				if(a[i][j]>=a[i][k]){   //判断a[i][j]是不是比同行其他元素大 
					cent++;
				}
				if(a[i][j]<=a[k][j]){  //判断a[i][j]是不是比同列其他元素小 
					bent++;
				}
			}
			if(cent==5&&bent==5){    //bent和cent都等于5说明a[i][j]是同行中最大的同列中最小的,即是鞍点 
				printf("%d %d %d",i+1,j+1,a[i][j]);   //输出 
				sum=1;break;  //找到了就退出循环  
			}
		}
		if(sum==1){   //找到了就退出循环 
			break;
		}
	}
	if(sum==0){  //sum等于0表示cent和bent始终不等于5即没有鞍点 
		printf("not found");
	}
}

 定义一个指针来改变cent和bent的值是因为直接改变运行会有问题,我也不知道为什么,希望有大佬解答👀👀👀,能写的注释都写了,还有什么不懂的可以评论区问。有问必答。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值