注册 登录
编程论坛 C++教室

寻找鞍点程序出错

a874695162 发布于 2014-08-23 20:36, 670 次点击
程序代码:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
const int n=3;
int a[n][n],i,k,g;
cout<<"请输入数据:"<<endl;
  for(i=0;i<n;i++)
      for(k=0;k<n;k++)
          {cout<<"a["<<i<<"]["<<k<<"]=";
           cin>>a[i][k];
          }

 cout<<"您输入的数组为:"<<endl;

 for(i=0;i<n;i++)
      {for(k=0;k<n;k++)
      cout<<setw(5)<<a[i][k];
      cout<<endl;}

 bool t=true;
   for(i=0;i<n;i++)
       for(k=0;k<n;k++)
          { for(g=0;g<n;g++)
               if(a[i][k]<a[i][g])t=false;//第i行最大
            for(g=0;g<n;g++)
               if(a[i][k]>a[g][k])t=false;//第k列最小
            if(t==true)cout<<"该数组的鞍点为a["<<i<<"]["<<k<<"]("<<a[i][k]<<")";
           }
       if(t==false)cout<<"该数组没有鞍点!"<<endl;}
       return 0;
}

输入预先设计好的数组50 42 66
                    49 97 106
                    47 32 28
应该输出“该数组的鞍点为a[2][0](47)"
可是却输出“该数组没有鞍点”
想了半天,不知道哪里出错,求解!
5 回复
#2
stop12042014-08-24 08:24
太麻了..

我说  你只有  t =false  没有 t = true ?
我看你for 语句里面都执行 n 次 t = false 了.

你的 t 已经永久为 false  不可能 有true出现了
#3
a8746951622014-08-24 15:09
回复 2 楼 stop1204
t的初值是true啊!
我的思路是对a中的元素逐一考察,只要某一元素在该行不是最大或在该列不是最小,就将它排除,剩下的就是鞍点

[ 本帖最后由 a874695162 于 2014-8-24 15:15 编辑 ]
#4
rjsp2014-08-25 08:39
没有修改你的算法,只是改正你的逻辑

程序代码:
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    const size_t m=3, n=3;
    int a[m][n] = { {  50,  42,  66 }
                  , {  49,  97, 106 }
                  , {  47,  32,  28 } };

    bool bfound = false;
    for( size_t r=0; r!=m; ++r )
    {
        for( size_t c=0; c!=n; ++c )
        {
            bool t = true;
            for( size_t i=0; t && i!=n; ++i )
                if( a[r][c] < a[r][i] )
                    t = false;
            for( size_t i=0; t && i!=m; ++i )
                if( a[r][c] > a[i][c] )
                    t = false;
            if( t )
            {
                cout << "saddle point: a[" << r << "][" << c << "](" << a[r][c] << ")\n";
                bfound = true;
            }
        }
    }
    if( !bfound )
        cout << "saddle point have not been found.\n";

    return 0;
}

#5
a8746951622014-08-25 22:18
回复 4 楼 rjsp
多谢指点!
#6
a8746951622014-08-25 22:18
回复 4 楼 rjsp
多谢指点!
1