Задача взята с сайта e-olymp.com.
Условие
Степенью симметрии натурального числа назовём количество пар его десятичных цифр, в которых цифры совпадают и расположены симметрично относительно середины десятичной записи этого числа. Если некоторая цифра стоит посередине десятичной записи, её тоже нужно учитывать в паре с ней самой. Найти степень симметрии числа $n$.
Входные данные
Одно натуральное число $n < 2 * 20^9$.
Выходные данные
Вывести степень симметрии числа $n$.
Тесты:
Ввод | Вывод |
$123322$ | $2$ |
$100$ | $1$ |
$1010$ | $0$ |
$1234321$ | $4$ |
$1234567891$ | $1$ |
Код на Haxe:
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 |
package; import cpp.Lib; class Main { static function main() { var n:Int = Std.parseInt(Sys.stdin().readLine()); var i:Int = 0; var count = 0; var num = []; if (n == 0) { num.push(0); } else { while (n > 0) { num.push(n % 10); n = Math.floor(n / 10); } } var j:Int = num.length - 1; while (i <= j) { if (num[i] == num[j]) { count++; } i++; j--; } Sys.stdout().writeString("" + count + "\n"); } } |
Ход решения:
Вначале считываем число. Затем раскладываем его по цифрам внутри массива (в обратном порядке, но для нашей задачи порядок цифр значения не имеет):
13 14 15 16 17 18 19 20 |
if (n == 0) { num.push(0); } else { while (n > 0) { num.push(n % 10); n = Math.floor(n / 10); } } |
Затем подсчитываем собственно степень симметрии, двигаясь внутри массива от крайних цифр к центру, а после выводим результат:
21 22 23 24 25 26 27 28 29 |
var j:Int = num.length - 1; while (i <= j) { if (num[i] == num[j]) { count++; } i++; j--; } Sys.stdout().writeString("" + count + "\n"); |
Ссылки:
Рабочий код для тестирования на try.haxe.org: Try Haxe !