鱼C论坛

 找回密码
 立即注册
查看: 473|回复: 7

[已解决]for循环无法成功执行

[复制链接]
发表于 2020-7-6 11:31:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<iostream>

  2. using namespace std;

  3. int main()
  4. {
  5.         int a[3][3];
  6.         cout << "初始化该3x3数组:";
  7.         int i, j;
  8.         for (i = 0; i < 3; i++)
  9.                 for (j = 0; j < 3; j++)
  10.                         cin >> a[i][j];

  11.         int max = 0, maxi = 0, maxj = 0;
  12. //First
  13.         for (i = 0; i < 1; i++)
  14.         {
  15.                 for (j = 0; j < 3; j++)
  16.                 {
  17.                         if (a[i][j] > max)
  18.                         {
  19.                                 max = a[i][j];
  20.                                 maxi = i;
  21.                                 maxj = j;
  22.                         }
  23.                 }
  24.         }

  25.         int min = max;
  26.         for (j = maxj; j < (maxj + 1); j++)
  27.                 for (i = 0; i < 3; i++)
  28.                         if (a[i][j] < min)
  29.                                 min = a[i][j];

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

  34. //Second
  35.         for (i = 1; i < 2; i++)
  36.         {
  37.                 for (j = 0; j < 3; j++)
  38.                 {
  39.                         if (a[i][j] > max)
  40.                         {
  41.                                 max = a[i][j];
  42.                                 maxi = i;
  43.                                 maxj = j;
  44.                         }
  45.                 }
  46.         }

  47.         int min2 = max;
  48.         for (j = maxj; j < (maxj + 1); j++)
  49.                 for (i = 0; i < 3; i++)
  50.                         if (a[i][j] < min2)
  51.                                 min2 = a[i][j];

  52.         if (min2 == max)
  53.                 cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
  54.         else
  55.                 cout << "第" << maxi + 1 << "行无鞍点" << endl;
  56. //Third
  57.         for (i = 2; i < 3; i++)
  58.         {
  59.                 for (j = 0; j < 3; j++)
  60.                 {
  61.                         if (a[i][j] > max)
  62.                         {
  63.                                 max = a[i][j];
  64.                                 maxi = i;
  65.                                 maxj = j;
  66.                         }
  67.                 }
  68.         }

  69.         int min3 = max;
  70.         for (j = maxj; j < (maxj + 1); j++)
  71.                 for (i = 0; i < 3; i++)
  72.                         if (a[i][j] < min3)
  73.                                 min3 = a[i][j];

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

  78.         return 0;
  79. }
复制代码


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

  1. #include<iostream>

  2. using namespace std;

  3. int main()
  4. {
  5.         int a[3][3];
  6.         cout << "初始化该3x3数组:";
  7.         int i, j;
  8.         for (i = 0; i < 3; i++)
  9.                 for (j = 0; j < 3; j++)
  10.                         cin >> a[i][j];

  11.         int max = 0, maxi = 0, maxj = 0;
  12.         //First
  13.         for (i = 0; i < 3; i++)
  14.         {
  15.                 for (j = 0; j < 3; j++)
  16.                 {
  17.                         if (a[i][j] > max)
  18.                         {
  19.                                 max = a[i][j];
  20.                                 maxi = i;
  21.                                 maxj = j;
  22.                         }
  23.                 }


  24.                 int min = max;
  25.                 for (j = maxj; j < (maxj + 1); j++)
  26.                         for (i = 0; i < 3; i++)
  27.                                 if (a[i][j] < min)
  28.                                         min = a[i][j];

  29.                 if (min == max)
  30.                         cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
  31.                 else
  32.                         cout << "第" << maxi + 1 << "行无鞍点" << endl;
  33.         }
  34. }
复制代码

最佳答案
2020-7-6 19:24:49
发现个新问题,max的值有问题,没有重新初始化,如果第一行中有个数比所有数大,就可能出现问题,改成这样

#include <iostream>

using namespace std;

int main()
{
        //输出鞍点,鞍点定义:在此行最大,在此列最小,问题:当鞍点不在第一行,无法正常输出
        int a[3][3];
        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[i][j];
                }
        }
        for (int i = 0; i < 3; i++)
        {
                for (int j = 0; j < 3; j++)
                {
                        cout << a[i][j] << " ";
                }
                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[i][j] > max)
                        {
                                max = a[i][j];
                                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[i][j] < min)
                                        min = a[i][j];
                        }
                }
                if (min == max)
                {
                        cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
                }
                else
                {
                        cout << "第" << maxi + 1 << "行无鞍点" << endl;
                }
        }
        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-6 13:04:38 | 显示全部楼层
一看就不可能打印的一样,光for循环的 i 的初始化就不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-6 14:13:27 From FishC Mobile | 显示全部楼层
修改之后的是在整个数组里面找max,原来的是在每行里面找,修改后的代码要打印出每行的鞍点是不行的。试试改成这样
#include<iostream>

using namespace std;

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

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

                if (min == max)
                        cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
                else
                        cout << "第" << maxi + 1 << "行无鞍点" << endl;     
        }
}
在手机上复制的,也没有运行过,有问题欢迎指正。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不行诶,还是得不到正确答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-6 14:45:15 From FishC Mobile | 显示全部楼层
巨兔12138 发表于 2020-7-6 14:28
不行诶,还是得不到正确答案

那我到地方了试一下这会儿在车上。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-6 16:02:48 | 显示全部楼层
nanqi2333 发表于 2020-7-6 14:45
那我到地方了试一下这会儿在车上。

嗯嗯好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-6 18:40:36 From FishC Mobile | 显示全部楼层
刚写了一下,貌似是i和j是所有for里面共用了的原因,改成这样就不会了
#include <iostream>

using namespace std;

int main()
{
        int a[3][3];
        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[i][j];
                }
        }
        int max = 0, maxi = 0, maxj = 0;
        //First
        for (int i = 0; i < 3; i++)
        {
                for (int j = 0; j < 3; j++)
                {
                        if (a[i][j] > max)
                        {
                                max = a[i][j];
                                maxi = i;
                                maxj = j;
                        }
                }
                int min = max;
                for (int j = maxj; j < (maxj + 1); j++)
                {
                        for (int i = 0; i < 3; i++)
                        {
                                if (a[i][j] < min)
                                        min = a[i][j];
                        }
                }
                if (min == max)
                {
                        cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
                }
                else
                {
                        cout << "第" << maxi + 1 << "行无鞍点" << endl;
                }
        }
        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-6 19:24:49 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
发现个新问题,max的值有问题,没有重新初始化,如果第一行中有个数比所有数大,就可能出现问题,改成这样

#include <iostream>

using namespace std;

int main()
{
        //输出鞍点,鞍点定义:在此行最大,在此列最小,问题:当鞍点不在第一行,无法正常输出
        int a[3][3];
        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[i][j];
                }
        }
        for (int i = 0; i < 3; i++)
        {
                for (int j = 0; j < 3; j++)
                {
                        cout << a[i][j] << " ";
                }
                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[i][j] > max)
                        {
                                max = a[i][j];
                                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[i][j] < min)
                                        min = a[i][j];
                        }
                }
                if (min == max)
                {
                        cout << "鞍点为第" << maxi + 1 << "行,第" << maxj + 1 << "列的" << max << endl;
                }
                else
                {
                        cout << "第" << maxi + 1 << "行无鞍点" << endl;
                }
        }
        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 20:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表