当前位置: 代码迷 >> C语言 >> 一个求二维数组鞍点的错误
  详细解决方案

一个求二维数组鞍点的错误

热度:194   发布时间:2006-07-15 20:06:46.0
一个求二维数组鞍点的错误

#include<stdio.h>
{
int a[3][4],i,j,flag,max,p,k;
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<=2;i++)
{
max=a[i][0];p=0;
for(j=1;j<=3;j++)
if(max<a[i][j])
{max=a[i][j];
p=j;}
else
p=0;
flag=1;
for(k=0;k<=2;k++)
if(max>a[k][p])
{flag=0;
continue;}
if(flag)
{printf("\n a[%d][%d]=%d",i,p,max);
break;}
}
if(!flag)
printf("no exist");
getch();}
这个是求二维数组鞍点的程序 本身是没有问题的 运行正常 但是偶试着把红色部分去掉 留下蓝色的 这个程序就无法得出正确结果(仍然是可以编译和运行的)无论输入什么样的数组 都显示无鞍点
按照我个人想法即使是去掉红色 保留蓝色 仍然是可以求出本行最大的数 以及正确纪录下标 虽然我自己无意中改正了 实在想不透 请求前辈们指点

搜索更多相关的解决方案: 鞍点  flag  int  include  stdio  

----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-15 12:57:58
nuciewth

来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9791
专家分:183
注 册:2006-5-23
  得分:0 
这是当然的,你想想每次运行时,假如存在if(max<a[i][j])不成立那么以前得到的最大值就得被0覆盖了
你说以后会有鞍点吗.

----------------解决方案--------------------------------------------------------
所谓鞍点就是即是该行又是该列中的最大值.
你的程序是首先找行中的最大值,然后判断该值是否也是该列中的最大值,若是则是鞍点,否则不是鞍点.
每找到一个鞍点就输出,如此循环3次,最后用flag 判断数组中是否有鞍点的存在.

----------------解决方案--------------------------------------------------------
谢谢jxnu 偶想明白了 假如在某1行中的 数 是大小交叉的话 是找不出本行最大的数的 只要出现1次 后面的数 比前面的小 必定被0覆盖了 当第一行 第一列那个数是鞍点 运行后才会输出结果  
----------------解决方案--------------------------------------------------------
麻烦楼上的。jxnu是我的学校。
呵呵,不用客气。
----------------解决方案--------------------------------------------------------
  相关解决方案