Вопрос задан 17.07.2023 в 14:50. Предмет Информатика. Спрашивает Грицкевич Никита.

Дано натуральное число n. Проверить, является ли оно счастливым билетом. Примечание: вообще, в

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

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Храмцов Матвей.

Ответ:

Код:

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;

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения этой задачи можно использовать следующий алгоритм:

  1. Преобразуйте число n в строку, чтобы можно было обращаться к его цифрам по индексу.
  2. Определите длину строки. Если длина нечетная, отбросьте центральную цифру, используя целочисленное деление на 2.
  3. Разделите строку пополам на левую и правую половины.
  4. Преобразуйте каждую половину в список цифр, используя int() для каждого символа строки.
  5. Вычислите сумму цифр в каждой половине с помощью функции sum().
  6. Сравните суммы цифр в левой и правой половинах. Если они равны, это счастливый билет, иначе - нет.

Вот пример реализации на языке Python:

python
def 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

Надеюсь, это поможет вам решить задание и получить хорошую оценку! Удачи!

0 0

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

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

Последние заданные вопросы в категории Информатика

Задать вопрос