用c语言程序编写 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍

#include<stdio.h>
int main()
{
int a[3][4],i,j,p1,p2,p3,c1,c2,c3;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
printf("\n");
c1=0;
c2=0;
c3=0;
p1=a[0][0];
p2=a[1][0];
p3=a[2][0];

for(j=0;j<4;j++);
{
if(p1>a[0][j])
{

p1=a[0][j];

c1=j;
}
if(p2>a[1][j])
{

p2=a[1][j];

c2=j;
}
if(p3>a[2][j])
{

p3=a[2][j];

c3=j;
}
}

for(i=0;i<3;i++)
{
if(p1>a[i][c1])
{printf("第一行没有鞍点\n");
continue;}
else
printf("有鞍点%d\n",p1);

if(p2>a[i][c2])
{printf("第二行没有鞍点\n");
continue;}
else
printf("有鞍点%d\n",p2);

if(p3>a[i][c3])
{printf("第三行没有鞍点\n");
continue;}
else
printf("有鞍点%d\n",p3);
}

for(i=0;i<3;i++)
{
for(j=0;i<4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}

#define N 10
#define M 10
void main( )
{ int i, j, k, m, n, flag1, flag2, a[N][M], max, maxj;
printf("输入行列数n,m:");
scanf("%d%d", &n,&m);
for (i =0; i <n; i ++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
flag2=0;
for(i =0; i <n; i ++)
{ max=a[i][0];
for(j=0;j<m;j++)
if(a[i][j]>max)
{ max=a[i][j];
maxj=j;
}
for(k=0,flag1=1;k<n&&flag1;k++)
if(max<a[k][maxj])
{ printf("第%d 行,第%d 列的%d 是鞍点\n", i,maxj,max);
flag2=1;}
if(flag1) flag1=0;
}
if(!flag2) printf(" 矩阵中无鞍点!\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-20
#include <stdio.h>
#define MAX 100

int main()
{
int a[MAX][MAX];
int m, n;
int i, j;
int row_max;
int flag;
int no = 1;

printf("请输入行数列数(以空格分隔):");
scanf("%d %d", &m, &n);

printf("请输入%d个数:\n", m * n);
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
scanf("%d", &a[i][j]);

for (i = 0; i < m; i++)
{
row_max = 0;
for (j = 0; j < n; j++)
if (a[i][j] > a[i][row_max]) row_max = j;

flag = 1;
for (j = 0; j < m; j++)
if (a[i][row_max] > a[j][row_max])
{
flag = 0;
break;
}
if (flag)
{
printf("鞍点:(%d, %d).\n", i+1, row_max+1);
no = 0;
}
}

if (no) printf("没有鞍点:\n");

return 0;
}本回答被提问者和网友采纳