На недавнем соревновании по компьютерному программированию, на котором я был, возникла проблема, когда вам нужно определить, является ли число N для 1 < = N < = 1000, является палиндромным квадратом. Палиндромный квадрат - это число, которое можно читать одинаково вперед и назад и может быть выражено как сумма двух или более последовательных совершенных квадратов. Например, 595 является палиндром и может быть выражен как 6^2 + 7^2 + 8^2 + 9^2 + 10^2 + 11^2 + 12^2.Учитывая число N, может ли N выражаться как сумма двух или более последовательных совершенных квадратов?
Я понимаю, как определить, является ли число палиндром, но у меня возникают проблемы с попыткой выяснить, может ли он быть выражен как сумма двух или более последовательных квадратов.
Вот алгоритм, который я попробовал:
public static boolean isSumOfSquares(int num) {
int sum = 0;
int lowerBound = 1;
//largest square root that is less than num
int upperBound = (int)Math.floor(Math.sqrt(num));
while(lowerBound != upperBound) {
for(int x=lowerBound; x<upperBound; x++) {
sum += x*x;
}
if(sum != num) {
lowerBound++;
}
else {
return true;
}
sum=0;
}
return false;
}
Мой подход устанавливает верхнюю границу до ближайшего квадратного корня к числу и устанавливает нижнюю границу 1 и сохраняет вычислив сумма квадратов от нижней границы до верхней границы. Проблема в том, что только нижняя граница изменяется, а верхняя граница остается неизменной.
В чем проблема? – jwatts1980
is это проблема USACO? – lacraig2
11 является палиндром, но не может быть выражен как^2 последовательным способом. Это приемлемо? –