2、设二维数组 b[5][4]中有鞍点,即b[i][j]元素值在第i行中最小,且在第j列中最大,试编写一程序找出所有的鞍点,并输出其下标值。也可能没有。
程序1:
#include"stdio.h"
int main()
{
float b[5][4];
int i,j,n,m;
float min,max;
for(i=0;i<5;i++)
for(j=0;j<4;j++)
scanf("%f",&b[i][j]);
for(i=0;i<5;i++)
{
min=b[i][0];
for(j=0;j<4;j++)
if(b[i][j]<min){
min=b[i][j];
m=i;
n=j;
}
max=b[m][n];
for(i=0;i<5;i++)
if(max>b[i][n])continue;
else break;
if(i==5)
printf("%d,%d/n",m+1,n+1);
}
return 0;
}
程序2(考虑元素相同):
#include<stdio.h>
int main(){
int i,j;
float b[5][4];
int temp_i=0,temp_j=0,flag,flag_1=0,t;
for(i=0;i<5;i++){
for(j=0;j<4;j++)
scanf("%f",&b[i][j]);
}
for(i=0;i<5;i++){ /*行循环*/
temp_i=i;
flag=1;
for(j=0;j<4;j++)
if(b[temp_i][temp_j]>b[i][j])
temp_j=j; /*找到行最小值*/
for(j=0;j<4;j++)
if(b[temp_i][temp_j]==b[i][j]) /*找相同元素*/
{
for(t=0;t<5;t++)
if(b[t][j]>b[temp_i][j]) /*列循环*/
{ /*找列最大值,条件取反,减少判断次数*/
flag=0;
break;
}
if(flag){
printf("(%d,%d)/n",temp_i,j);
flag_1=1;
}
}
}
if(!flag_1)printf("There is no answer!");
return 0;
}