Задача взята с сайта e-olymp.com.
Условие
Степенью симметрии натурального числа назовём количество пар его десятичных цифр, в которых цифры совпадают и расположены симметрично относительно середины десятичной записи этого числа. Если некоторая цифра стоит посередине десятичной записи, её тоже нужно учитывать в паре с ней самой. Найти степень симметрии числа [latex]n[/latex].
Входные данные
Одно натуральное число [latex]n < 2\cdot10^9.[/latex]
Выходные данные
Вывести степень симметрии числа [latex]n[/latex].
Тесты:
Ввод | Вывод |
123322 | 2 |
100 | 1 |
1010 | 0 |
1234321 | 4 |
1234567891 | 1 |
Код на 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 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int i = 0; int j = 0; int num[] = new int[10]; if (n == 0) { num[0] = 0; } else { while (n > 0) { num[j] = n % 10; n /= 10; j++; } j--; } int count = 0; while (i <= j) { if (num[i] == num[j]) count++; i++; j--; } System.out.print(count); } } |
Алгоритм:
Вначале считываем число. Затем раскладываем его по цифрам внутри массива (в обратном порядке, но для нашей задачи порядок цифр значения не имеет):
12 13 14 15 16 17 18 19 20 21 |
if (n == 0) { num[0] = 0; } else { while (n > 0) { num[j] = n % 10; n /= 10; j++; } j--; } |
Затем подсчитываем собственно степень симметрии, двигаясь внутри массива от крайних цифр к центру, а после выводим результат:
22 23 24 25 26 27 28 |
int count = 0; while (i <= j) { if (num[i] == num[j]) count++; i++; j--; } System.out.print(count); |
Ссылки:
Рабочий код для тестирования на Ideone.com: Ideone.com