Вопрос задан 08.04.2025 в 21:38. Предмет Информатика. Спрашивает Болотова Есения.

Нужна срочно программа на PascalABC, помогите кто может пожалуйста.
Билет считается счастливым, если в его n-значном номере сумма первых [n/2] цифр равна сумме [n/2] последних цифр (при нечетном n центральная цифра в “проверке на счастье” не участвует и может быть любой). Подсчитайте число счастливых билетов с различными n-значными номерами (ведущие нули в номерах возможны, но номера, состоящего из одних нулей, не существует).

Входные данные
На вход программе подается натуральное число n < 16.

Выходные данные
Выведите количество n-значных счастливых билетов.

Перейти к ответам

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

Отвечает Хохлов Богдан.

Вот пример программы на PascalABC, которая решает поставленную задачу. Программа подсчитывает количество счастливых билетов с nn-значными номерами. Для этого используется перебор всех возможных номеров и проверка их на "счастливость":

pascal
program HappyTickets;

var n, half, count, i, sum1, sum2: integer; number: string;

// Функция для подсчета суммы цифр в указанной части строки function SumOfDigits(s: string; startIndex, endIndex: integer): integer; var j, sum: integer; begin sum := 0; for j := startIndex to endIndex do sum := sum + (ord(s[j]) - ord('0')); // Преобразуем символ в цифру SumOfDigits := sum; end;

// Основная программа begin // Читаем число n readln(n); // Переменные count := 0; // Счетчик счастливых билетов half := n div 2; // Половина длины номера // Перебор всех возможных номеров for i := 1 to trunc(power(10, n)) - 1 do begin number := IntToStr(i); // Преобразуем номер в строку // Добавляем ведущие нули, если длина меньше n while length(number) < n do number := '0' + number; // Считаем суммы цифр для первой и второй половины номера sum1 := SumOfDigits(number, 1, half); sum2 := SumOfDigits(number, n - half + 1, n); // Если суммы равны, увеличиваем счетчик if sum1 = sum2 then count := count + 1; end; // Вывод результата writeln(count); end.

Пояснения:

  1. Функция SumOfDigits:

    • Принимает строку, начальный и конечный индексы и возвращает сумму цифр в указанной части строки.
  2. Основная логика:

    • Считывается число nn, вычисляется половина nn (целая часть от деления nn на 2).
    • Перебираются все возможные числа от 11 до 10n110^n - 1. Число преобразуется в строку, к которой добавляются ведущие нули, чтобы её длина была равна nn.
    • Проверяется, равны ли суммы первой и второй половин числа.
    • Если равны, счетчик увеличивается.
  3. Ограничения:

    • Программа работает для n<16n < 16, так как иначе количество возможных номеров (10n10^n) становится слишком большим для перебора.
  4. Оптимизация:

    • Если требуется дополнительная производительность, можно использовать динамическое программирование для подсчета сумм и сократить количество вычислений.

Запустив эту программу, вы получите количество nn-значных счастливых билетов.

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

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

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

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