7-5 找鞍点 (10 分)c语言解答

7-5 找鞍点 (10 分)
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:
输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
输出样例1:
2 1
输入样例2:
2
1 7
4 1
输出样例2:
NONE

解答思路:这题一开始我是直接在主函数中进行判断的好多for循环弄得我乱的一p,最后测试数据才对了一个真的难受

后来想到函数通过一个函数判断这个点然后就简单很多了

我的代码

#include <stdio.h>
#define maxn 6
int judge(int a[][maxn],int n,int r,int c){//次函数用于判断该点是否为矩阵中的鞍点
	int i;//假设传进来的点为鞍点 
	for(i=0;i<n;i++){
		//先判断是不是行上的最大值
		if(a[r][i]>a[r][c]){
			//那说明传入进来的值不是该行上的最大值
			return 0; 
		} 
	} 
	for(i=0;i<n;i++){
		//用于判断该传入数是否为该列上的最小值
		if(a[r][c]>a[i][c]){
			return 0;
		} 	
	}
	return 1;
	//如果上述过程中没有跳出则说明它就是鞍点,所以返回判断值1 
}

int main()
{
	int a[6][6];
	int n;
	int i;
	int j;
	scanf("%d",&n);//输入n
	for(i=0;i<n;i++){
		for(j=0;j<n;j++)
		scanf("%d",&a[i][j]);//输入数据
	}
	int flat=0;
	//下面是遍历每个数字,经过鞍点条件判断是否为素数
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(judge(a ,n ,i ,j ) = =1){
				printf("%d %d", i , j );
				flat=1;//这里是用于判断是否有鞍点输出了,有的话判断值flat=1最后就不会输出NONE。
			}
		}
	}
	if(flat==0)
		printf("NONE");
    return 0;
}

ps.要是有更好的方法,麻烦评论一下哦,如果有错误欢迎指出
pps.我自己是真的弱,真的很希望帮助哈
ppps.希望转载的话附上我名字就好了,and代码要多自己理解而不是复制粘贴,就算抄一遍也不要复制粘贴
月光不染是非

猜你喜欢

转载自blog.csdn.net/qq_43382350/article/details/84533498