Путешествуя на автомобиле, вы заехали на автозаправочную станцию. До следующей заправки 200 километров. Напишите программу, которая будет
определять, нужно ли вам заправляться или можно подождать до
следующей станции. Программа должна спросить: какой размер вашего
бензобаке в литрах; сколько горючего в бензобаке (в процентах); сколько
километров проходит автомобиль на одном литре топлива. результатом
работы программы должна быть информация о количестве километров, которые еще
можно проехать и подождать до следующей автозаправочной станции, или
немедленно заправиться.
a:array[1..10000] of integer;
i, n, first, last:integer;
fl: boolean;
begin
Read(n);
For i:= 1 to n do
Read(a[i]);fl:=false;
For i:= 1 to n do
if (a[i] mod 5 = 0) then
if (fl = false) then begin
fl:= true;
first := i;
last:= i;
end
else
last := i;
Writeln('Первый -> ', first);
Writeln('Последный -> ', last);
end.
У - узел
М - маска
С - сеть
Нам известен узел - это 200.15.100.23
Нам известен адрес сети - это 200.15.96.0
Маска неизвестна. Если в маске стоит 255 - то число остается тоже самое:
У - 200.15.100.23
М- 255.255.Х.0
С - 200.15.96.0
Нам нужно найти НАИМЕНЬШЕЕ возможное значение третьего слева байта маски, его обозначила за Х выше.
Переведем 100 и 96 в двоичную систему счисления и получим:
100 - 1100100
96 - 1100000
Т.к в маске 8 разрядов, то перед каждым полученным числом в двоичной системе счисления поставим 0.
Получим:
01100100 - у
xxxxxxxx - м
01100000 - с
Сделаем побитовое перемножение с конца. Запомним, что в маске идут сначала все нули, а затем единицы.
01100100 - узел. Его умножаем на маску
11100000 - маска.
01100000 - сеть. Получаем ее после перемножения узла на маску.
Перемножили, получили маску - 11100000.
Возвращаемся к вопросу задачи: Чему равно наименьшее возможное значение третьего слева байта маски?
Тут все просто, осталось перевести маску из двоичной СС в десятичную СС.
Расставим степени двойки над маской
76543210
11100000
, что и является верным ответом.
Если остались вопросы - задавай в комментариях, отвечу.