Переведем ip-адреса в двоичную систему:
121.171.5.70 = 01111001.10101011.00000101.01000110
121.171.5.107 = 01111001.10101011.00000101.01101011
По условию адреса находятся в одной сети, то есть смотрим совпадающие биты ( выделены жирным).
Получается адрес сети:
01111001.10101011.00000101.01000000
А маска :
11111111.11111111.11111111.11000000
Нам надо найти наименьшее количество адресов, то есть попробуем изменить маску, добавив один бит: 11111111.11111111.11111111.11100000
Применив поразрядную конъюнкцию вычисляем адрес сети для обоих адресов:
01111001.10101011.00000101.01000000
01111001.10101011.00000101.01100000
Как видим адреса сетей разные, что не соответствует условию задачи.
Поэтому подходящая маска для наименьшего количества адресов:
11111111.11111111.11111111.11000000
количество возможных адресов: 2⁶ = 64
ответ: 64
--- Python 3.8.3 ---
import typing
from typing import List
class Item:
def __init__(self, name: str, cost: int):
self._n = name
self._c = cost
@property
def Name(self):
return self._n
@property
def Cost(self):
return self._c
def Report(data: List[Item]):
Rep = 'Bought:\n'
for item in data:
Rep += f'{item.Name} : {item.Cost} $\n'
Rep += f'Total cost: {sum([item.Cost for item in data])} $\n'
return Rep
def main():
Buy = []
CurrentCommand = 'Y'
while CurrentCommand == 'Y':
print(' new buy ')
n = input('Name: \n')
c = int(input('Cost: \n'))
Buy.append(Item(n,c))
print(Report(Buy))
CurrentCommand = input('Continue? Y/N\n')
if __name__ == "__main__":
main()
Объяснение:
Все надписи выводятся на английском потому, что мне лень менять раскладку) Суть осталась та же
Некий "товар" описан классом для более удобного доступа к его атрибутам при формировании отчёта.
Том - Сом - Сок - Сук
Том - Сом - Сум - Сук
Том - Ток - Сок - Сук
Том - Ток - Тук - Сук
Том - Тум - Сум - Сук
Том - Тум - Тук - Сук
Это при условии, что нельзя заменить букву "с" на букву "с", иначе количество путей бесконечно.