Наибольшее произведение-палиндром
Число-палиндром с обеих сторон (справа налево и слева направо) читается одинаково. Самое большое число-палиндром, полученное умножением двух двузначных чисел – 9009 = 91 × 99.
Найдите самый большой палиндром, полученный умножением двух трехзначных чисел.
Я решил эту задачу с использованием LINQ.
static void Main()
{
Queue <int> palindrom = new Queue <int>();
Queue <int> first_num = new Queue<int>();
Queue <int> second_num = new Queue<int>();
for (int a = 999; a > 100; a--)
{
for (int b = 999; b > 100; b--)
{
int c = a * b;
string s = c.ToString();
string reverse_s = Reverse(s);
if (s == reverse_s)
{
first_num.Enqueue(a);
second_num.Enqueue(b);
palindrom.Enqueue(c);
}
}
}
int max = 0;
int f_num = 0;
int s_num = 0;
int n = 0;
foreach (int p in palindrom)
{
if (max < p)
{
max = p;
f_num = first_num.ElementAt<int>(n);
s_num = second_num.ElementAt<int>(n);
}
n++;
}
Console.WriteLine($"Самый большой палиндром : {max}, получен умножением {f_num} на {s_num}");
Console.ReadKey();
}
public static string Reverse(string s)
{
char[] charArray = s.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
Код рабочий и работает правильно.
Но я бы хотел решить его без использования LINQ. И кроме того, в списке "palindrom" храниться по 2 одинаковых палиндрома так как 993*913 и 913*993 - это одно и тоже. Надо удалить эти копии вместе с элементами копии в стеках "first_num" и "second_num".
Ответы (1 шт):
Автор решения: Leksor
→ Ссылка
Без использования Linq
var max = 0;
var firstValue = 0;
var secondValue = 0;
for (var i = 100; i < 999; i++)
{
for (var j = 100; j < 999; j++)
{
var multiplication = i * j;
if (Reverse(multiplication.ToString()) == multiplication.ToString())
{
if (max < multiplication)
{
max = multiplication;
firstValue = i;
secondValue = j;
}
}
}
}
Console.WriteLine($"Самый большой палиндром : {max}, получен умножением {firstValue} на {secondValue}");
Console.ReadKey();