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代码要多自己理解而不是复制粘贴,就算抄一遍也不要复制粘贴
月光不染是非