巨兔12138 发表于 2020-7-6 11:31:21

for循环无法成功执行

#include<iostream>

using namespace std;

int main()
{
        int a;
        cout << "初始化该3x3数组:";
        int i, j;
        for (i = 0; i < 3; i++)
                for (j = 0; j < 3; j++)
                        cin >> a;

        int max = 0, maxi = 0, maxj = 0;
//First
        for (i = 0; i < 1; i++)
        {
                for (j = 0; j < 3; j++)
                {
                        if (a > max)
                        {
                                max = a;
                                maxi = i;
                                maxj = j;
                        }
                }
        }

        int min = max;
        for (j = maxj; j < (maxj + 1); j++)
                for (i = 0; i < 3; i++)
                        if (a < min)
                                min = a;

        if (min == max)
                cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
        else
                cout << "第" << maxi + 1 << "行无鞍点" << endl;

//Second
        for (i = 1; i < 2; i++)
        {
                for (j = 0; j < 3; j++)
                {
                        if (a > max)
                        {
                                max = a;
                                maxi = i;
                                maxj = j;
                        }
                }
        }

        int min2 = max;
        for (j = maxj; j < (maxj + 1); j++)
                for (i = 0; i < 3; i++)
                        if (a < min2)
                                min2 = a;

        if (min2 == max)
                cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
        else
                cout << "第" << maxi + 1 << "行无鞍点" << endl;
//Third
        for (i = 2; i < 3; i++)
        {
                for (j = 0; j < 3; j++)
                {
                        if (a > max)
                        {
                                max = a;
                                maxi = i;
                                maxj = j;
                        }
                }
        }

        int min3 = max;
        for (j = maxj; j < (maxj + 1); j++)
                for (i = 0; i < 3; i++)
                        if (a < min3)
                                min3 = a;

        if (min3 == max)
                cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
        else
                cout << "第" << maxi + 1 << "行无鞍点" << endl;

        return 0;
}

各位大神们帮忙看下,当我的代码如上时,运行后可以得到我想要的结果
但是当我改成如下的循环时,就得不到我想要的结果了,大神们能给说一下原因吗

#include<iostream>

using namespace std;

int main()
{
        int a;
        cout << "初始化该3x3数组:";
        int i, j;
        for (i = 0; i < 3; i++)
                for (j = 0; j < 3; j++)
                        cin >> a;

        int max = 0, maxi = 0, maxj = 0;
        //First
        for (i = 0; i < 3; i++)
        {
                for (j = 0; j < 3; j++)
                {
                        if (a > max)
                        {
                                max = a;
                                maxi = i;
                                maxj = j;
                        }
                }


                int min = max;
                for (j = maxj; j < (maxj + 1); j++)
                        for (i = 0; i < 3; i++)
                                if (a < min)
                                        min = a;

                if (min == max)
                        cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
                else
                        cout << "第" << maxi + 1 << "行无鞍点" << endl;
        }
}

FishC--Student 发表于 2020-7-6 13:04:38

一看就不可能打印的一样,光for循环的 i 的初始化就不一样

nanqi2333 发表于 2020-7-6 14:13:27

修改之后的是在整个数组里面找max,原来的是在每行里面找,修改后的代码要打印出每行的鞍点是不行的。试试改成这样
#include<iostream>

using namespace std;

int main()
{
      int a;
      cout << "初始化该3x3数组:";
      int i, j;
      for (i = 0; i < 3; i++)
                for (j = 0; j < 3; j++)
                        cin >> a;

      int max = 0, maxi = 0, maxj = 0;
      //First
      for (i = 0; i < 3; i++)
      {
                for (j = 0; j < 3; j++)
                {
                        if (a > max)
                        {
                              max = a;
                              maxi = i;
                              maxj = j;
                        }
                }
int min = max;
                for (j = maxj; j < (maxj + 1); j++)
                        for (i = 0; i < 3; i++)
                              if (a < min)
                                        min = a;

                if (min == max)
                        cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
                else
                        cout << "第" << maxi + 1 << "行无鞍点" << endl;   
      }
}
在手机上复制的,也没有运行过,有问题欢迎指正。

巨兔12138 发表于 2020-7-6 14:28:26

nanqi2333 发表于 2020-7-6 14:13
修改之后的是在整个数组里面找max,原来的是在每行里面找,修改后的代码要打印出每行的鞍点是不行的。试试 ...

不行诶,还是得不到正确答案

nanqi2333 发表于 2020-7-6 14:45:15

巨兔12138 发表于 2020-7-6 14:28
不行诶,还是得不到正确答案

那我到地方了试一下{:10_257:}这会儿在车上。

巨兔12138 发表于 2020-7-6 16:02:48

nanqi2333 发表于 2020-7-6 14:45
那我到地方了试一下这会儿在车上。

嗯嗯好的

nanqi2333 发表于 2020-7-6 18:40:36

刚写了一下,貌似是i和j是所有for里面共用了的原因,改成这样就不会了
#include <iostream>

using namespace std;

int main()
{
      int a;
      cout << "初始化该3x3数组:";
      //int i, j;.这句注释掉,在c++11的新标准中for可以直接for(int i)
      for (int i = 0; i < 3; i++)
      {
                for (int j = 0; j < 3; j++)
                {
                        cin >> a;
                }
      }
      int max = 0, maxi = 0, maxj = 0;
      //First
      for (int i = 0; i < 3; i++)
      {
                for (int j = 0; j < 3; j++)
                {
                        if (a > max)
                        {
                              max = a;
                              maxi = i;
                              maxj = j;
                        }
                }
                int min = max;
                for (int j = maxj; j < (maxj + 1); j++)
                {
                        for (int i = 0; i < 3; i++)
                        {
                              if (a < min)
                                        min = a;
                        }
                }
                if (min == max)
                {
                        cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
                }
                else
                {
                        cout << "第" << maxi + 1 << "行无鞍点" << endl;
                }
      }
      system("pause");
      return 0;
}

nanqi2333 发表于 2020-7-6 19:24:49

发现个新问题,max的值有问题,没有重新初始化,如果第一行中有个数比所有数大,就可能出现问题,改成这样

#include <iostream>

using namespace std;

int main()
{
      //输出鞍点,鞍点定义:在此行最大,在此列最小,问题:当鞍点不在第一行,无法正常输出
      int a;
      cout << "初始化该3x3数组:";
      //int i, j;.这句注释掉,在c++11的新标准中for可以直接for(int i)
      for (int i = 0; i < 3; i++)
      {
                for (int j = 0; j < 3; j++)
                {
                        cin >> a;
                }
      }
      for (int i = 0; i < 3; i++)
      {
                for (int j = 0; j < 3; j++)
                {
                        cout << a << " ";
                }
                cout << endl;
      }
      int max = 0, maxi = 0, maxj = 0;
      //First
      for (int i = 0; i < 3; i++)
      {
                int max = 0;
                for (int j = 0; j < 3; j++)
                {
                        if (a > max)
                        {
                              max = a;
                              maxi = i;
                              maxj = j;
                              cout << "max=a[" << i << "[" << j << "]" << endl;
                        }
                }
                int min = max;
                for (int j = maxj; j < (maxj + 1); j++)
                {
                        for (int i = 0; i < 3; i++)
                        {
                              if (a < min)
                                        min = a;
                        }
                }
                if (min == max)
                {
                        cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
                }
                else
                {
                        cout << "第" << maxi + 1 << "行无鞍点" << endl;
                }
      }
      system("pause");
      return 0;
}
页: [1]
查看完整版本: for循环无法成功执行