Задание по информатике само задание:
Определите количество пятизначных чисел, записанных в девятеричной системе счисления, в записи которых ровно одна цифра 3, при этом никакая из цифр 5, 6, 7, 8 не стоит рядом с цифрой 3.
мой код:
from itertools import product
cnt = 0
nums = '012345678'
for i in product(nums, repeat = 5):
a = ''.join(i)
if a[0] != 0 and a.count("3") == 1 and '53' not in a and '63' not in a and '73' not in a and '83' not in a and '35' not in a and '36' not in a and '37' not in a and '38' not in a:
cnt += 1
print(cnt)
у меня получается 7168, а должно быть 6400. не понимаю, что я сделал не так

25 Фев в 19:40
54 +1
0
Ответы
1

Чтобы исправить ваш код, нужно понять, в чем заключается ошибка, и корректно подсчитать количество пятизначных чисел в соответствии с заданными условиями.

Ошибки в вашем коде:

Проверка на ноль: В текущей реализации вы не проверяете, начинается ли число с нуля, корректно. Для этого нужно проверять первый элемент в кортежах иливстроке,послеобъединенияихили в строке, после объединения ихиливстроке,послеобъединенияих.

Неверная проверка соседства: Проверка соседства цифр 5, 6, 7, 8 около цифры 3 должна быть более точной.

Исправленный подход:

Давайте сделаем это более математически, чтобы избежать генерации всех возможных комбинаций.

Выберите позицию для цифры 3: Цифра 3 может находиться на одной из 5 позиций. Это можно сделать 5 способами.

Заполните остальные 4 позиции: Оставшиеся четыре позиции могут быть заполнены цифрами 0, 1, 2, 4, 5, 6, 7, 8 тоесть,цифрами0−8,исключая3то есть, цифрами 0-8, исключая 3тоесть,цифрами08,исключая3. При этом нельзя ставить 5, 6, 7, 8 рядом с цифрой 3.

Реализация:

Вот пример, как это можно сделать без генерации всех комбинаций:

count = 0
digits = '012456789' # Используем только допустимые цифры без 3
no_adjacent = '456789' # Запрещенные цифры в соседстве с 3
for position_of_3 in range555:
# Учитываем, что 3 не может быть на первой позиции
if position_of_3 == 0:
for digit in digits1:1:1:: # Первая цифра не может быть 0
remaining_digits = dfordindigitsifdnotinnoadjacentd for d in digits if d not in no_adjacentdfordindigitsifdnotinnoa djacent # Без соседей к 3
count += lenremainingdigitsremaining_digitsremainingd igits ** 4−14 - 141 # Оставшиеся 4 позиции
else:
# Для остальный позиций 1−41-414 можно ставить 0
remaining_digits = dfordindigitsifdnotinnoadjacentd for d in digits if d not in no_adjacentdfordindigitsifdnotinnoa djacent
count += lenremainingdigitsremaining_digitsremainingd igits ** 5−15 - 151 # Заполнение остальных позиций
printcountcountcountПояснение к коду:Мы перебираем все возможные позиции для цифры 3.Для первой позиции проверяем, что первую цифру мы не можем оставить равной нулю — выбираем из других доступных цифр.Для остальных позиций, где 3 уже находится, исключаем 5, 6, 7, 8 из соседей.Умножаем количество способов заполнения оставшихся позиций на количество возможных позиций для 3.

С помощью этого подхода мы должны получить правильное количество пятизначных чисел, соответствующих заданным критериям.

25 Фев в 19:40
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир