Я новичок в C++ и пытаюсь пройти [Project Euler][1]. Я прошел весь путь до [Проблемы 4][2] (впечатляет, я знаю), и у меня проблемы с тем, что я считаю областью действия моих переменных внутри цикла while. Если вы не знаете, задача попросит вас найти наибольшее палиндромное произведение двух трехзначных целых чисел. Я сделал цикл while, который должен проверять, является ли продукт палиндромом (который я поместил в другую функцию, которая отлично работает).
Вот мой текущий код (хотя он менялся много раз - я старался сделать этот наиболее определенным, поэтому все остальные ifs):
int main()
{
int int1 = 999;
int int2 = 999;
int nProduct = int1 * int2;
int nFinalProduct = 0;
while (int1 >= 100)
{
if (paltest(nProduct) == 1 && nProduct > nFinalProduct && int2 > 100)
{
nFinalProduct = nProduct;
--int2;
}
else if (paltest(nProduct) == 1 && nProduct > nFinalProduct
&& int2 == 100)
{
nFinalProduct = nProduct;
--int1;
}
else if (paltest(nProduct) == 0 && int2 > 100)
{
--int2;
}
else if (paltest(nProduct) == 0 && int2 == 100)
{
--int1;
}
}
cout << nFinalProduct;
}
Я в основном пытаюсь сказать, является ли продукт палиндромом И выше, чем предыдущий, добавить его в nFinalProduct и уменьшить int1 или int2, чтобы получить следующий продукт.
Я пытался переписать main() несколько раз, используя одну и ту же логику, но каждый раз вывод не меняется с того, на что я инициализировал nFinalProduct (в данном случае 0). Это только обновляет значение внутри цикла while, а затем сбрасывает его после завершения цикла? Мое решение для третьей проблемы Project Euler использует ту же идею инициализации переменной, ее изменения внутри цикла while и печати вне цикла, что отлично работает. Я не могу понять, в чем здесь проблема, за исключением, может быть, того, что он никогда не находит paltest() равным 1, что я тестировал кучи и не могу найти проблему.
Любая помощь приветствуется.
ОБНОВЛЕНИЕ: Хорошо, ребята, большое спасибо. Я переместил объявление nProduct внутрь цикла while, и теперь он не закончится. Это мой новый код:
int main(){
int int1 = 999;
int int2 = 999;
int nFinalProduct = 0;
while (int1 >= 100){
int nProduct = int1 * int2;
if (paltest(nProduct) == 1 && nProduct > nFinalProduct && int2 > 100){
nFinalProduct = nProduct;
--int2;
}
else if (paltest(nProduct) == 1 && nProduct > nFinalProduct && int2 == 100){
nFinalProduct = nProduct;
int2 = 999;
--int1;
}
else if (paltest(nProduct) == 0 && int2 > 100){
--int2;
}
else if (paltest(nProduct) == 0 && int2 == 100){
int2 = 999;
--int1;
}
}
cout << nFinalProduct;
}
Который теперь просто будет работать бесконечно. Я чувствую, что int1 никогда не уменьшается (что в конечном итоге приведет к завершению цикла). Если он не уменьшается, это означает, что int2 никогда не уменьшается. Я на правильном пути?
[1] https://projecteuler.net [2] https://projecteuler.net/problem=4
nFinalProduct
, не был выполнен, что означает, что условия, проверяющие их, никогда не выполнялись. - person greatwolf   schedule 10.09.2013