В массиве целых положительных чисел а1, а2,...аN разместить в начале массива числа, в записи которых первая цифра "1", сохраняя исходное расположение как среди чисел с "1", так и среди остальных чисел. C++ С комментариями )
PascalABC.NET function ToBinary (x:integer):string; beginif (x>0) then ToBinary := ToBinary(x div 2) + (x mod 2).ToString;end; function FromBinary (x:string):integer; beginif (x.Length>0) then FromBinary := FromBinary(x.Substring(1)) + x[1].ToDigit*Round(Power(2,x.Length-1));end; function func (x:integer):integer; beginvar s := ToBinary(x); loop 2 do s += s.AsEnumerable.Sum(c->c.ToDigit) mod 2; func:=FromBinary(s);end; begin Println('f(N):',func(ReadInteger('N:'))); Println('Количество:',(1..160).Count(x->func(x) in 90..160)); end.
Примечание:
Если к числу в двоичной системе счисления приписывать в конец цифры, то число увеличивается и никак не может уменьшится. Поэтому, n<f(n). Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).
ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).
Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).
Задача легкая. Для начала, узнаем сколько у нас всего символов, а для этого умножим количество страниц на количество строк и количество символов так мы найдем количество символов. Обозначается количество символов, как K:
символов
Объем информации находится по формуле:
, где i это вес одного символа(В нашем случае 8 бит)
Тогда объём равен:
бит
Вспоминаем или узнаем, что 8 бит это 1 байт то есть в байтах у нас будет:
714000 байт
1024 байт = 1 кбайт, получается
714000 байт = 697,27 кбайт ≈ 697 кбайт( как удобно)
Примечание:
Если к числу в двоичной системе счисления приписывать в конец цифры, то число увеличивается и никак не может уменьшится. Поэтому, n<f(n). Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).
ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).
Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).
Пример работы:
5712000 бит = 714000 байт = 697 кбайт
Объяснение:
Задача легкая. Для начала, узнаем сколько у нас всего символов, а для этого умножим количество страниц на количество строк и количество символов так мы найдем количество символов. Обозначается количество символов, как K:
Объем информации находится по формуле:
Тогда объём равен:
Вспоминаем или узнаем, что 8 бит это 1 байт то есть в байтах у нас будет:
714000 байт
1024 байт = 1 кбайт, получается
714000 байт = 697,27 кбайт ≈ 697 кбайт( как удобно)