我正在解决Project Euler的问题 9 。在我的解决方案中,我使用“goto”语句来打破两个 for 循环。问题如下:
毕达哥拉斯三元组是三个自然数 abc 的集合,其中,
a^2 + b^2 = c^2
例如,3^2 + 4^2 = 9 + 16 = 25 = 52。
恰好存在一个毕达哥拉斯三元组,其 a + b + c = 1000。求积 abc。
我的解决方案是在 C++ 中:
int a,b,c;
const int sum = 1000;
int result = -1;
for (a = 1; a<sum; a++){
for (b = 1; b < sum; b++){
c = sum-a-b;
if (a*a+b*b == c*c){
result = a*b*c;
goto found;
}
}
}
found:
std::cout << "a:" << a << std::endl;
std::cout << "b:" << b << std::endl;
std::cout << "c:" << c << std::endl;
std::cout <<"Result:" << result << std::endl;
由于“goto”语句在 c++ 程序员中不是很流行,我想知道这是否可以被认为是“goto”的合理使用。或者,对于不需要“goto”的问题,是否有更好的解决方案。我的意思不是一个解决方案,它只是避免“goto”,而是以改进算法的方式避免“goto”。