Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

В чëм ошибка алгоритма?? Палиндром из прозведения двух трëхзначных чисел.

ястреб ворон Мыслитель (7518), на голосовании 23 часа назад
Решаю задачи из Проекта Эйлера это 4 задача.
В нëм нужно найти максимальной число произведения двух трëхзначных чисел. Должно получится 906609. У меня не выходит. Там для примера был паллиндром из двухзначных чисел и мой код работал правильно и получтлся ответ правильный 9009.
Но для трëхзначных не работает.
 import 'dart:math'; 

void main(List<String> arguments) {
int x = 999;
int y = 999;
List<int> palindromeList = [];
int num;
for(x;x>=100;x--){
for(y;y>=100;y--){
num = x * y;
if(palindrome(num.toString())){
palindromeList.add(num);
print(palindromeList.reduce(max));
}
}
}
}
bool palindrome(String snum){
int left = 0;
int right = snum.length - 1;
while(left<right){
if(snum[left]!=snum[right]){
return false;
}
left++;
right--;
}
return true;
}
Голосование за лучший ответ
Андрей Высший разум (458964) 1 месяц назад
 void main(List<String> arguments) {
int x = 999;
List<int> palindromeList = [];
int num;
for(x;x>=100;x--){
int y = 999;
for(y;y>=100;y--){
num = x * y;
if(palindrome(num.toString())){
palindromeList.add(num);
}
}
}
print(palindromeList.reduce(max));
}
У тебя же после первого цикла по y переменная y становится равной 99 и дальше цикл по y уже не выполняется.

Но список в задаче не имеет смысла. Ведь нужно только максимальное значение, а не все возможные значения.
 void main() { 
int res = 0;
for (int x = 999; x * x > res; x--) {
for (int y = x; y >= 100; y--) {
int num = x * y;
if (num <= res) { break; }
if (palindrome(num.toString())) { res = num; }
}
}
print(res);
}
АндрейВысший разум (458964) 1 месяц назад
Или так - чтобы совсем минимизировать кол-во вычислений:
 void main() {
int res = 0, y;
for (int x = 999; (y = x * x) > res; x--) {
int t = max(100 * x + 1, res);
for (; y > t; y -= x) {
if (palindrome(y.toString())) {
res = y;
break;
}
}
}
print(res);
}
АндрейВысший разум (458964) 1 месяц назад
Ошибка в предыдущем варианте. Должно быть:
 int t = max(100 * x - 1, res); 
Похожие вопросы