Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2013, 16:06   #1
CharlieScene
Новичок
Джуниор
 
Регистрация: 02.06.2013
Сообщений: 2
По умолчанию Работа с массивами (C++)

Перед министерством страны стоит задача: объединить все IP адреса, которые есть в стране, в наименьшую возможную сеть. Для этого работники переписали все IP адреса, которые только были в стране. Однако некоторые адреса были переписаны несколькими людьми, что усложняет вашу задачу.
IP адрес - это 4 числа, которые записаны через точку, в десятичной системе исчисления. Каждая составляющего IP адреса может принимать значение от 0 до 255. Лидирующие нули не допускаются. IP сеть описывается двумя составляющими: адресом сети и её маской. И адрес сети, и маска записывается по тем же правилам, что и IP адрес.
Для того, чтобы понять, что из себя представляет адрес сети и ее маска, необходимо рассмотреть их бинарное представление.
IP сеть содержит 2^n адресов, где (0≤n≤32), при этом маска подсети (в бинарном представлении) содержит 32-n лидирующих единиц и n нулей в конце. Адрес сети (в бинарном представлении) имеет 32-n произвольных бит в своем начале и n нулей в конце. IP сеть содержит все адреса, которые имеют тот же набор из 32-n бит в начале, что и адрес сети, и имеют n произвольных бит в конце.
Говорят, что одна IP сеть меньше другой, если она содержит меньшее количество адресов.

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

Формат входных данных: первая строка содержит целое число N - количество IP адресов в списке (1≤n≤1000)
Следующие N строк содержат записи об IP адресах (записи могут повторяться).

Формат выходных данных: В первой строке вывести адрес наименьшей IP сети. Во второй строке вывести маску наименьшей IP сети.

Пример входных и выходных данных:

CharlieScene вне форума Ответить с цитированием
Старый 02.06.2013, 16:44   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Один адрес соответствует подсети из этого адреса и маски -1.-1.-1.-1.
Для каждого нового адреса, если он влезает в уже имеющуюся подсеть, ничего делать не надо. Если не влезает, подсеть надо расширить.
Abstraction вне форума Ответить с цитированием
Старый 02.06.2013, 16:51   #3
CharlieScene
Новичок
Джуниор
 
Регистрация: 02.06.2013
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Один адрес соответствует подсети из этого адреса и маски -1.-1.-1.-1.
Для каждого нового адреса, если он влезает в уже имеющуюся подсеть, ничего делать не надо. Если не влезает, подсеть надо расширить.
А как собственно, это дело реализовать?
CharlieScene вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с Массивами С++ Ales_Korvin Помощь студентам 1 09.01.2012 20:00
Работа с массивами Ovt Помощь студентам 0 03.12.2010 18:59
Работа с массивами driver05 Паскаль, Turbo Pascal, PascalABC.NET 2 24.05.2010 17:27
работа с массивами Sparky Win Api 2 24.02.2010 19:02