背景
偶然在网上看到了如下这么一道益智题,想着用C++解决一下。
29a + 30b + 31c = 366
求a + b + c的值
代码与困惑
这是最开始的代码
#include<iostream>
using namespace std;
int main()
{
int a=0;
int b=0;
int c=0;
for (; a < 13; a++) {
for (; b < 13; b++) {
for (; c < 12; c++) {
if ((29 * a + 30 * b + 31 * c) == 366) {
cout << "a:" << a << endl;
cout << "b:" << b << endl;
cout << "c:" << c << endl;
cout << "a+b+c:" << a + b + c << endl;
}
}
}
}
return 0;
}
运行结果为无输出,如下图。
这是修改后的代码
#include<iostream>
using namespace std;
int main()
{
int a;
int b;
int c;
for (a = 0; a < 13; a++) {
for (b = 0; b < 13; b++) {
for (c = 0; c < 12; c++) {
if ((29 * a + 30 * b + 31 * c) == 366) {
cout << "a:" << a << endl;
cout << "b:" << b << endl;
cout << "c:" << c << endl;
cout << "a+b+c:" << a + b + c << endl;
}
}
}
}
return 0;
}
输出结果正确,如下图。
两段代码唯一的不同就在于第一段代码for循环中缺省了赋初值。请问造成运行结果不同的原因是什么?