Проверить, является ли четырехзначное число счастливым билетом

Формулировка. Дано четырехзначное число. Проверить, является ли оно «счастливым билетом». Примечание: счастливым билетом называется число, в котором: а) при четном количестве цифр в числе сумма цифр его левой половины равна сумме цифр его правой половины; б) при нечетном количестве цифр – то же самое, но с отбрасыванием серединной цифры. Например, рассмотрим число 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:

right := n mod 10;

n := n div 10;

right := right + n mod 10;

n := n div 10;

3)      Присваиваем переменной left последнюю цифру n, отбрасываем ее и прибавляем к right единственную оставшуюся в переменной n цифру:

left := n mod 10;

n := n div 10;

left := left + n;

4)      Выводим на экран результат сравнения накопленных сумм:

writeln(left = right);

Код:

  1. program HappyTicket;
  2. var
  3. n: word;
  4. left, right: byte;
  5. begin
  6. readln(n);
  7. right := n mod 10;
  8. n := n div 10;
  9. right := right + n mod 10;
  10. n := n div 10;
  11. left := n mod 10;
  12. n := n div 10;
  13. left := left + n;
  14. writeln(left = right)
  15. end.