6、题目:“鞍点”问题
鞍点是数组某行中最大的数,同时是该数所在列的最小的数。找到鞍点并输出其行列标
思路:先找出一行中最大的数,再判断它是不是其所在列最小的数
#include<stdio.h>
int c; //用全局变量c存储鞍点的列下标
int search(int p[][4], int i);
int main(){
int num1[3][4]={9,80,205,40,90,-60,96,1,210,-3,101,89};
int num2[4][4]={9,80,205,40,90,-60,196,1,210,-3,101,89,45,54,156,7};
int i, j;
//调用函数查找num1的鞍点并输出行列标
//put为0表示整个数组没有鞍点,为1表示有一个或多个鞍点即整个数组有鞍点
int put=0;
printf("num1:\n");
for(i=0;i<3;i++){
if(search(num1,i) == 1){
put=1;
printf("r=%d c=%d\n", i+1, c+1);
}
}
if(put==0){
printf("NO\n");
}
//调用函数查找num2的鞍点并输出行列标
printf("num2:\n");
put=0;
for(i=0;i<4;i++){
if(search(num2,i) == 1){
put=1;
printf("r=%d c=%d\n", i+1, c+1);
}
}
if(put==0){
printf("NO\n");
}
return 0;
}
int search(int p[][4], int i){
c=0;
int j, find=0;
//找出第i行最大的数
for(j=1;j<4;j++){
if(p[i][c]<p[i][j]){
c=j;
}
}
//判断第i行最大的数是否为所在列最小的数
for(j=1;j<3;j++){
if(p[i][c]>p[j][c]){
find=0;
break;
}else{
find=1;
}
}
return find;
}