c语言求二维数组鞍点,找不出bug在哪?
如下:若输入的为3×3的数组1 2 3 4 5 6 7 8 9则运行出错,若9 8 7 6 5 4 3 2 1则可运行成功
#include<stdio.h>
//先找列最小,再找行最大
int main()
{ int m,n;
int i,j;
scanf("%d%d",&m,&n);//m行n列数组
int a[m][n];
for(i=0;i<m;i++)//输入二维数组
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("\n");
for(i=0;i<m;i++)把数组元素排列好输出
{
for(j=0;j<n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n\n");
int min,max;//列最小,行最大
int mm,nn;
int flag=1;
for(i=0;i<n;i++)
{
min=a[0][i];
for(j=1;j<m;j++)
{
if(min>a[j][i])//找出列最小,并标记为mm行nn列
{
min=a[j][i];
mm=j;nn=i;
}
}
max=min;//将列最小当作行最大
for(j=1;j<n;j++)//用列最小做行的比较,找出行最大
{
if(max<a[mm][j])
{
flag=0;
continue;
}
}
if(flag==1)
{
printf("鞍点是第%d行%d列的%d\n\n",mm+1,nn+1,max);
break;
}
}
if(flag==0)
printf("没有鞍点\n\n");
return 0;
}
* *
回复
1个回答

test
2024-07-11
试下呢
int main() {
int m,n;
int i,j;
scanf("%d%d",&m,&n);//m行n列数组
int a[m][n];
for(i=0;i<m;i++)//输入二维数组
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("\n");
for(i=0;i<m;i++)把数组元素排列好输出
{
for(j=0;j<n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n\n");
int min,max;//列最小,行最大
int mm,nn;
int flag=1;
for(i=0;i<n;i++)
{
max=a[0][i];
for(j=1;j<m;j++)
{
if(max<a[j][i])//找出列最大,并标记为mm行nn列
{
max=a[j][i];
mm=j;nn=i;
}
}
min=max;//将列最大当作行最小
for(j=1;j<n;j++)//用列最大做行的比较,找出行最小
{
if(min>a[mm][j])
{
flag=0;
continue;
}
}
if(flag==1)
{
printf("鞍点是第%d行%d列的%d\n\n",mm+1,nn+1,min);
break;
}
}
if(flag==0)
printf("没有鞍点\n\n");
return 0;
}
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容