| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 313 人关注过本帖
标题:lijm1989 进来下
只看楼主 加入收藏
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
结帖率:90.48%
收藏
已结贴  问题点数:20 回复次数:3 
lijm1989 进来下
#include <stdio.h>
#define n 5
void main()
{int a[n][n],i,j,k,minj,flag;
 for(i=0;i<n;i++)
  {for(j=0;j<n;j++)
    scanf("%d",&a[i][j]);}
 printf("a[5][5]=");
 for(i=0;i<n;i++)
  {for(j=0;j<n;j++)
    printf("%d ",a[i][j]);
   printf("\n");
    }
  flag=1;
while(flag)
   { for(i=0;i<n;i++)
      {minj=0;
       for(j=0;j<n;j++)
        if(a[i][j]>a[i][minj]) minj=j;
       for(k=0;k<n;k++)
        { if(a[k][minj]<=a[i][minj]) flag=1;
          else flag=0;
               }
          }
      }
  if(flag==0) printf("a[n][n] have andian ,it's %d\n",a[i-1][minj]);
  else printf("a[n][n] don't have  andian \n");
  getch();
}  根据前面你的提示,我修改成用while 循环, 这样里面flag的值是可以从循环里面出来到外面的while(flag)利用是吧?
可好像成了死循环了。输入完数据以后不出结果。请指点下,也算是实现我前面说过的加分的话。
2009-11-30 12:55
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:0 
如果一直没有鞍点的确出不来啊,死循环啊。。
而且
for(k=0;k<n;k++)
        {
          if  (a[k][minj]<=a[i][minj])
                   flag=1;
          else flag=0;
          }
这一段有问题。
2009-11-30 13:04
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:20 
你注意看循环里。。。
       for(k=0;k<n;k++)
        { if(a[k][minj]<=a[i][minj]) flag=1;
          else flag=0;
就算找到了鞍点,在这里改变了标志变量,但是要想flag回到while的循环条件判断while(flag),还是要等for那个循环循环完毕才行。。。
程序代码:
    while(flag)    //  我喜欢这种对齐方式。。。
    { 
        for(i=0;i<n;i++)  //  下面的flag变了没用啊,我这关还没过就想出去和while见面啦??flag变了出不去的话我这再继续循环的话 flag又变回1了。。哈哈。。
        {
            minj=0;
            for(j=0;j<n;j++)
                if(a[i][j]>a[i][minj]) 
                    minj=j;
            for(k=0;k<n;k++)
            { 
                if(a[k][minj]<=a[i][minj])
                    flag=1;
                else 
                    flag=0;  /*晕啊,我明明就找到鞍点了。。跟while说下就可以出去printf了啊!!可for就是不让我出去。。只好碰运气了,for叫我最后一次找刚好找到的话才交差。。唉。。郁闷啊。。*/
            }
        }
    }
···所以说,如果i = n-1;时找不到鞍点的话,while就会构成死循环。。怎么都退不出来了。。i=0到n-2有鞍点都没用,那里改变了flag的值,还是会在i=n-1时被改回1值。。。

用标志变量的话。。就像刚刚改的那样···if就不用了··有和没有一个样。。。
程序代码:
#include <stdio.h>     //  我喜欢这种对齐···
#define n 5 
void main()
{
    int a[n][n],i,j,k,minj,flag;
    for(i=0;i<n;i++)            
    {
        for(j=0;j<n;j++)                                  
            scanf("%d",&a[i][j]);
    }                          
    printf("a[5][5]=");                                   
    for(i=0;i<n;i++)                                   
    {
        for(j=0;j<n;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    flag=1;
    for(i=0;i<n && flag;i++)   // flag加在这时和while(flag)一样,都是用flag来控制循环,一找到立即退出
    {
        minj=0;
        for(j=0;j<n;j++)
            if(a[i][j]>a[i][minj])
                minj=j;
            for(k=0;k<n;k++)
            { 
                if(a[k][minj]<=a[i][minj])
                    flag=1;
                else
                    flag=0; 
            }
    }
    if(flag==0)
        printf("a[n][n] have andian ,it's %d\n",a[i-1][minj]);  // 注意,循环后i后加1 ,要输出正确的那个数,应该减1才行
    else 
        printf("a[n][n] don't have  andian \n");
    getch();
}
2009-11-30 13:26
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:0 
顶楼上的
2009-11-30 14:09
快速回复:lijm1989 进来下
数据加载中...
 
   



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

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