C语言编程题,找鞍点

1. 输入一个4行5列的整型数组,求出这个数组的“鞍点”。鞍点是指这个元素在所处的行上最大,列上最小。请输出这个鞍点的位置及鞍点的值。如果没有鞍点,请输出没找到。
例如数组:
2 3 4 5 6
3 4 5 6 8
3 1 2 5 9
3 4 1 8 7
鞍点是:第0行第4列,值为6

#include<stdio.h>

int main()

{

int a[4][4]={{2,3,9,5},{6,7,8,3},{0,5,7,5},{2,1,8,3}};

int i,j,k,i0,j0,find=0;

printf("数组a:\n");

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

   printf("%3d",a[i][j]);

printf("\n");

}

for(i=0;i<4;i++)        //穷举所有的行

{

j0=0;

for(j=1;j<4;j++)

 if(a[i][j]>a[i][j0])j0=j;    //找到第i行上最大的数a[i][j0]

k=1;

for(i0=0;i0<4;i0++)    //对找到的该数穷举所有行

 if(a[i0][j0]<a[i][j0])k=0;    //如它不是本列上最小的数就“一票否决”

if(k)    //若确认是,就输出,并记录已找到

{

 printf("鞍点是:a[%d][%d]=%d\n",i,j0,a[i][j0]);

 find=1;

}

}

if(!find)    //若未找到,则输出提示信息

printf("此数组无鞍点!\n");

return 0;

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-01-07

#include<stdio.h>
int
main()
{
int
a[4][4]={{2,3,9,5},{6,7,8,3},{0,5,7,5},{2,1,8,3}};
int
i,j,k,i0,j0,find=0;
printf("数组a:\n");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
 
 printf("%3d",a[i][j]);
printf("\n");
}
for(i=0;i<4;i++)        //穷举所有的行
{
j0=0;
for(j=1;j<4;j++)
 if(a[i][j]>a[i][j0])j0=j;    //找到第i行上最大的数a[i][j0]
k=1;
for(i0=0;i0<4;i0++)    //对找到的该数穷举所有行
 if(a[i0][j0]<a[i][j0])k=0;    //如它不是本列上最小的数就“一票否决”
if(k)    //若确认是,就输出,并记录已找到
{
 printf("鞍点是:a[%d][%d]=%d\n",i,j0,a[i][j0]);
 find=1;
}
}
if(!find)    //若未找到,则输出提示信息
printf("此数组无鞍点!\n");
return
0;
}

第2个回答  推荐于2019-06-29
#include <stdio.h>
#define N 4 //N---多少行//
#define M 5 //M---多少列//
void main()
{
int a[N][M],i,j,t,k,max,min,l=0;
printf("请输入数组:\n");
for (i=0;i<N;i++)
for (j=0;j<M;j++)
scanf("%d",&a[i][j]);
for (i=0;i<N;i++)
{
max=a[i][0];k=0;
for (j=1;j<M;j++)
if (a[i][j]>max)
{
max=a[i][j];k=j;
}
min=a[0][k];
for (t=1;t<N;t++)
if (a[t][k]<min)
min=a[t][k];
if (max==min)
{printf("所要的数在数组中的%d行%d列值为%d\n",i,t,max);l++}
}
if(l==0)
printf("there is no such number.\n");
}本回答被提问者和网友采纳
第3个回答  2018-04-09
a[3][3]=7
第4个回答  2010-04-19
//可以运营;
#include<stdio.h>
#define N 5
#define M 4
void main()
{
int a[M][N]={2,3,4,5,6,
3,4,5,6,8,
3,1,2,5,9,
3,4,1,8,7
};
int column[M],max,min,row[N];
int i,j;
for(i=0;i<M;i++)
{
max=a[i][0];
column[i]=0;
for(j=1;j<N;j++)
if(a[i][j]>max)
column[i]=j; //记录该行最大元素的列标;
}
for(i=0;i<N;i++)
{
min=a[0][i];
row[i]=0;
for(j=0;j<M;j++)
if(a[j][i]<min)
row[i]=j; //记录该列最大元素的列标;
}
for(i=0;i<M;i++)
if(row[column[i]]==i) //如果记录为同一元素,则为暗点;
printf("\nGood %d %d :%5d",i,column[i],a[i][column[i]]);

}
//希望kutpbpb的回答能对你有所帮助!百度地图

本数据来源于百度地图,最终结果以百度地图最新数据为准。

相似回答