Я решаю задачу 9 на Project Euler. В моем решении я использую инструкцию "goto" , чтобы вырваться из двух для циклов. Проблема заключается в следующем:
Пифагорейский триплет представляет собой набор из трех натуральных чисел, a b c, для которых
a ^ 2 + b ^ 2 = c ^ 2
Например, 3 ^ 2 + 4 ^ 2 = 9 + 16 = 25 = 52.
Существует ровно один пифагорейский триплет, для которого a + b + c = 1000. Найдите продукт abc.
Мое решение находится в С++:
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" не очень популярны среди программистов на С++, я хотел бы знать, если это можно считать разумным использованием "goto" . Или если есть лучшее решение проблемы, которая не нуждается в "goto" . Тем самым я не имею в виду решение, которое просто избегает "goto" , но которое позволяет избежать "goto" таким образом, чтобы улучшить алгоритм.