Решение задачи №596
Условие задачи №596:
Дано четырехзначное число. Проверить, является ли оно «счастливым билетом».Примечание: счастливым билетом называется число, в котором: а) при четном количестве цифр в числе сумма цифр его левой половины равна сумме цифр его правой половины; б) при нечетном количестве цифр – то же самое, но с отбрасыванием серединной цифры. Например, рас-смотрим число 1322. Его левая половина равна 13, а правая – 22, и оно является счастливым биле-том (т. к. 1 + 3 = 2 + 2). Аналогично: 1735 (1 + 7 = 3 + 5), 1111 (1 + 1 = 1 + 1) и т. д.
Примеры других счастливых билетов за рамками условия текущей задачи: 7 (отбросили единственную цифру), 39466 (3 + 9 = 6 + 6, а 4 отбросили), 11 (1 = 1), и т. д.
Решение
Подробное решениеДля ввода достаточно одной переменной n типа word. Все, что необходимо сделать для решения – это последовательно получить все разряды исходного числа, причем из двух младших разрядов (единиц и десятков) сформировать первую сумму, а из двух старших разрядов – вторую, после чего вывести на экран результат булевского выражения равенства полученных сумм. Первую сумму будем хранить в переменной right, а вторую – в переменной left (выбрано по расположению цифр в записи числа). Значение обоих из них не может превосходить 18 (т. к. для наибольшего допустимого числа 9999 обе суммы равны 9 + 9 = 18), поэтому для их описания ис-пользуем тип byte.
Более детальный разбор алгоритма:
1) Вводим число n;
2) Присваиваем переменной right значение последней цифры числа n, потом отбрасываем эту цифру, затем повторяем то же самое, но на этот раз уже прибавляем добытую цифру к прежнему значению right:
1 2 3 4 | right := n mod 10; n := n div 10; right := right + n mod 10; n := n div 10; |
3) Присваиваем переменной left последнюю цифру n, отбрасываем ее и прибавляем к right единственную оставшуюся в переменной n цифру:
1 2 3 | left := n mod 10; n := n div 10; left := left + n; |
4) Выводим на экран результат сравнения накопленных сумм:
1 | writeln(left = right); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | program HappyTicket; var n: word; left, right: byte; begin readln(n); right := n mod 10; n := n div 10; right := right + n mod 10; n := n div 10; left := n mod 10; n := n div 10; left := left + n; writeln(left = right)end. |