
Дано натуральное число n. Проверить, является ли оно счастливым билетом. Примечание: вообще, в
математике обычно рассматриваются счастливые билеты с нечетным количеством цифр, потому что у них можно явно выделить левую и правую половины одинаковой длины,сумма цифр которых и сравниваются. Однако мы несколько расширим это определение, полагая, что если число имеет нечетную длину, его центральную цифру можно отбросить, так как ее логично было бы прибавить к накапливаемым суммам обоих половин, что, собственно,не изменить отношение между ними. Вводные данные Выходные данные 14350 TRUE 65248 FALSE Помогите пожалуйста, просто от этого задания зависит моя оценка :)

Ответы на вопрос

Ответ:
Код:
1.program HappyTicket;
2.var
3.n, a: longint;
4.left, right, digits, i: byte;
5.begin
6.readln(n);
7.a := n;
8.digits := 0;
9.while a <> 0 do begin
10.a := a div 10;
11.inc(digits)
12.end;
13.left := 0;
14.right := 0;
15.for i := 1 to digits div 2 do begin
16.right := right + n mod 10;
17.n := n div 10
18.end;
19.if odd(digits) then n := n div 10;
20.for i := 1 to digits div 2 do begin
21.left:= left + n mod 10;
22.n := n div 10
23.end;
24.writeln(left = right)
25.end.
Представим, как должен работать алгоритм при вводе числа 14350:
1) Считаем длину числа, она равна 5 (строки 11-14);
2) В цикле из 5 div 2 = 2 повторений прибавляем к right крайние справа цифры 0 и 5, после чего отбрасываем их и имеем в n 143 (строки 17-20);
3) Так как odd(digits) = odd(5) = true, отбрасываем 3, после чего имеем в n 14 (строка 21);
4) В цикле из 5 div 2 = 2 повторений прибавляем к left оставшиеся цифры 1 и 4, после чего n становится равно 0, что, впрочем, нас уже не интересует (строки 22-25);
5) Выводим на экран значение выражения left = right – ответ положительный (строка 26)
Объяснение:
Для ее решения необходимо знать длину числа (то есть его разрядность), вследствие чего нам необходимо скопировать переменную n в некоторую другую (например, a), чтобы на основе a посчитать количество десятичных разрядов n и сохранить его в некоторой переменной digits. Сделать это можно так:
a := n;
digits := 0;
while a <> 0 do begin
a := a div 10;
inc(digits)
end;



Для решения этой задачи можно использовать следующий алгоритм:
- Преобразуйте число n в строку, чтобы можно было обращаться к его цифрам по индексу.
- Определите длину строки. Если длина нечетная, отбросьте центральную цифру, используя целочисленное деление на 2.
- Разделите строку пополам на левую и правую половины.
- Преобразуйте каждую половину в список цифр, используя int() для каждого символа строки.
- Вычислите сумму цифр в каждой половине с помощью функции sum().
- Сравните суммы цифр в левой и правой половинах. Если они равны, это счастливый билет, иначе - нет.
Вот пример реализации на языке Python:
pythondef is_lucky_ticket(n):
n_str = str(n)
length = len(n_str)
if length % 2 != 0:
# Отбрасываем центральную цифру, если длина нечетная
n_str = n_str[:length // 2] + n_str[length // 2 + 1:]
left_half = n_str[:length // 2]
right_half = n_str[length // 2:]
sum_left = sum(int(digit) for digit in left_half)
sum_right = sum(int(digit) for digit in right_half)
return sum_left == sum_right
# Примеры использования:
print(is_lucky_ticket(14350)) # Вывод: True
print(is_lucky_ticket(65248)) # Вывод: False
Надеюсь, это поможет вам решить задание и получить хорошую оценку! Удачи!


Похожие вопросы







Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili