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;
}
}
一看就不可能打印的一样,光for循环的 i 的初始化就不一样 修改之后的是在整个数组里面找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;
}
}
在手机上复制的,也没有运行过,有问题欢迎指正。 nanqi2333 发表于 2020-7-6 14:13
修改之后的是在整个数组里面找max,原来的是在每行里面找,修改后的代码要打印出每行的鞍点是不行的。试试 ...
不行诶,还是得不到正确答案 巨兔12138 发表于 2020-7-6 14:28
不行诶,还是得不到正确答案
那我到地方了试一下{:10_257:}这会儿在车上。 nanqi2333 发表于 2020-7-6 14:45
那我到地方了试一下这会儿在车上。
嗯嗯好的 刚写了一下,貌似是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;
} 发现个新问题,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]