Hackerrank – Popis problému
Celý popis zadania sa nacháza – Hackerrank.
Riešenie
Potrebujeme zistiť, či je súčin dvoch 3-ciferných čísel palindróm, ktorý je zároveň menší ako zadaná hranica.
Moje riešenie pozostáva v zadaní dvoch činiteľov, ktoré sú inicializované na 999
. Druhý činiteľ postupne znižujeme (odpočítavame 1
), až kým jeho hodnota nebude 100
. Pre každú dvojicu činiteľov vypočítame súčin. Ak je súčin palindróm a zároveň menší ako horná hranica, porovnáme ho s aktuálnym maximom.
Postup opakujeme, až kým obidva činitele rovnajú 100
. Vtedy vypíšeme výsledok, ktorý je aktuálne maximum.
9992
opakovaní nespôsobí prekročenie časového limitu na úlohu.
Vytvoril som riešenie v týchto programovacích jazykoch:
Všetky riešenia sú dostupné aj na mojom GitHub profile.
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import java.util.Scanner; public class LargestPalindromeProduct { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int tests = Integer.parseInt(scanner.nextLine()); for (int i = 0; i < tests; i++) { int number = Integer.parseInt(scanner.nextLine()); System.out.println(palindromeNumber(number)); } scanner.close(); } private static int palindromeNumber(int number) { // int root = (int) Math.sqrt(number); int max = 0; for (int j = 999; j >= 100; j--) { for (int k = 999; k >= 100; k--) { int product = j * k; if(product < number && isPalindrome(String.valueOf(product))) { if(product > max) { max = product; } } } } return max; } private static boolean isPalindrome(String text) { for (int i = 0; i < text.length() / 2; i++) { if(text.charAt(i) != text.charAt(text.length() - 1 - i)) { return false; } } return true; } } |