| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 560 人关注过本帖
标题:数组中的鞍点
只看楼主 加入收藏
lonelyfairy
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2009-9-29
结帖率:90.91%
收藏
已结贴  问题点数:10 回复次数:5 
数组中的鞍点
找出一个二维数组中的鞍点,所谓鞍点是该位置上的数在该行上最大,在该列上最小,注意:并不是所有的二维数组都有鞍点!    高手请赐教!!!
搜索更多相关主题的帖子: 鞍点 
2009-10-14 21:36
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
思路有点乱
2009-10-14 22:22
lonelyfairy
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2009-9-29
收藏
得分:0 
我写了一个,不过结果总是错的!程序也很乱   指点一下!!!



#include "stdio.h"
#define N 3(“3”是随便定义的)
main()
{int i,j,g,min,max,t=0;
 int a[N][N];
 printf("请输入数组a[%d][%d]:",N,N);
 for(i=0;i<N;i++)
 { for(j=0;j<N;j++)
   scanf("%d",&a[i][j]);
 }
 max=a[0][0];
 for(i=0;i<N;i++)
 { for(j=0;j<N-1;j++)
   {if(max<=a[i][j])
      max=a[i][j];
   }
   for(i=0;i<N;i++)
   { if(max>=a[i][j])
    min=a[i][j];
   }
   if(max==min)
     {printf("鞍点:a[%d][%d]=%d\n",i,j,max);
      t++;
     }
  }
  if(t==0)
  printf("该数组没有鞍点\n");
}
2009-10-14 22:49
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
for(i=0;i<N;i++)  
   { if(max>=a[i][j])  
    min=a[i][j];  
   }  
你的意思是先在某一行里找出该行里最大的数,然后在此元素对应的列里找最小的元素,若两者是同一个数,则输出。
但是你在两个for循环之后又用了同名字的一个关于i的(行)for循环,可能会出错吧。
你可以把此处的i改为k,既然定位到第j列,那么在第j列作比较,用a[k][j],k=0,1,2,与变量i区分开来。再试试。明天再试试
2009-10-14 23:26
zhjr5201314
Rank: 4
等 级:业余侠客
帖 子:63
专家分:238
注 册:2009-9-10
收藏
得分:0 
#include "stdio.h"  
#define N 3
main()  
{int i,j,s,min,max,g,t=0;  
int a[N][N];  
printf("请输入数组a[%d][%d]:",N,N);  
for(i=0;i<N;i++)  
{ for(j=0;j<N;j++)  
   scanf("%d",&a[i][j]);  
}  
for(i=0;i<N;i++)  
{   g=0;
    max=min=a[i][0];
    for(j=0;j<N;j++)  
   {if(max<a[i][j])  
    {max=a[i][j];
    g++;}  
   }  
   min=a[i][g];  
   for(s=0;s<N;s++)  
   { if(min>a[s][g])  
    min=a[s][g];  
   }  
   if(max==min)  
     {printf("鞍点:a[%d][%d]=%d\n",i,g,max);  
      t++;  
     }  
}  
  if(t==0)  
  printf("该数组没有鞍点\n");
}
2009-10-15 11:29
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:10 
#include "stdio.h"   
#define N 3  
main()   
{int i,j,s,min,max,g,t=0;   
int a[N][N];   
printf("请输入数组a[%d][%d]:",N,N);   
for(i=0;i<N;i++)   
{ for(j=0;j<N;j++)   
   scanf("%d",&a[i][j]);   
}   
for(i=0;i<N;i++)   
{   g=0;  
    max=min=a[i][0];  
    for(j=0;j<N;j++)   
   {if(max<a[i][j])   
    {max=a[i][j];  
    g=j;}   //可以用数组 4 1 7    5 6 8    2 3 9验证,应该是笔误
   }   
   min=a[i][g];   
   for(s=0;s<N;s++)   
   { if(min>a[s][g])   
    min=a[s][g];   
   }   
   if(max==min)   
     {printf("鞍点:a[%d][%d]=%d\n",i,g,max);   
      t++;   
     }   
}   
  if(t==0)   
  printf("该数组没有鞍点\n");  
}
想法很不错
但是仍然没有考虑当数组中出现相等数的时候
比如;
1 2 2
5 6 8
2 3 9,
这个数组应该算是没有鞍点吧,但是会输出结果的。

[ 本帖最后由 m456m654 于 2009-10-15 12:03 编辑 ]
2009-10-15 12:01
快速回复:数组中的鞍点
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023166 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved