11707
18.03.2021 15:22

Решение задач в интегрированной среде разработки. ​

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
vikakulba
12.02.2021 18:51

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

Значительно позже появляются такие носители информации, как перфокарта и перфолента. Далее, в середине 50-х годов столетия, на смену им приходит магнитная лента. В 1969 году был изобретен первый гибкий диск, что стало прорывом в истории развития устройств хранения информации.

История средств хранения информации, которые мы используем в нынешнее время, началась во второй половине столетия. Наиболее известные и используемые в наше время носители информации - CD- и DVD-диски и Flash-карты. CD-носители относятся к оптическим носителям информации, которые имеют вид диска из пластика, в центре которого находится круглое отверстие. Запись и считывание данных осуществляется с лазера. Преимущественно применяется для записи музыкальных файлов, изображений и документов. В среднем объем устройства - 670 Мбайт. Датой рождения дисков считается 1980 год. Авторами идеи стали две компании с мировым именем - Philips и Sony. DVD имеет такой же вид, как и CD. Разница лишь в том, что его емкость составляет от 4,5 до 17 Гб, что позволяет хранить на нем файлы довольно большого объема. Разработкой данных дисков также занимались компания Philips совместно с Sony с начала 90-х годов столетия. Первый диск был выпущен в 1996 году.

USB-флеш-накопитель - устройство, выполненное на одной микросхеме. Имеет компактный небольшой размер. Емкость устройства от 2 до 512 Гб. Позволяет хранить любые файлы. Появились данные устройства в 2000 году, при этом первый носитель мог вместить лишь 8 Мб информации. Изобретение приписывают израильской компании M-Sistems.

Последний вариант - флеш-накопители. Но, несмотря на свою компактность, они довольно ненадежны. Во-первых, так до сих пор и не установлен срок работы накопителей. Во-вторых, вы рискуете потерять данные, подключив устройство к компьютеру с вирусом. Выводы Итак, история средств хранения информации, кратко нами описанная, довольно интересная. Мы выяснили, какое из устройств надежнее всего и почему. Надеемся, данная информация была вам полезна.

0,0(0 оценок)
Ответ:
evgenypuchnin2
14.06.2021 01:35
Я буду думать, что сочетание - набор нулей и единиц, в котором на i-м месте стоит 0, если i-й буквы нет в сочетании, и 1, если она есть. Тогда, например, (0111) соответствует bcd. Общее число чисел по условию N, число единиц равно K. Этот список упорядочен по убыванию, и нам необходимо найти M-е число в этом списке.
Всего число выбрать K элементов из N равно C_N^K ("цэ из N по K").
Поймем, например, надо ли брать 1-й элемент. Всего сочетаний, где первый элемент взят: C_(N-1)^(K-1) {в самом деле, в этом случае осталось выбрать K-1 из оставшихся N-1}; не взят: C_(N-1)^K. Учитывая, что те, в которые первый элемент входит, идут перед теми, в которые он не входит, решаем: если M > C_(N-1)^(K-1), 1-й элемент не берём, иначе берём.
Дальше если 1-й взяли, M оставляем таким же, если нет - уменьшаем на C_(N-1)^(K-1).
Процесс повторяем, пока не найдем все буквы.
Осталось понять, как считать C_N^K. Исходя из рассуждений выше, C_N^K = C_(N-1)^(K-1) + C_(N-1)^K. Кроме того, C_N^0 = 1 для всех N, C_N^K = 0 при K < 0 или K > N. Пользуясь этим, можно найти все C_N^K. Не забываем про длинную арифметику: C_N^K может не влезать в обычные типы данных. Я буду писать на PascalABC.NET, там длинная арифметика есть - тип BigInteger, если нет - легко найти, как это писать. (Update: в данном случае всё влезет в longint - биномиальные коэффициенты не превысят 10 миллионов с небольшим). 
Итак, вот и искомый код:
begin
  var N, K: integer;
  read(N, K);
  var M := ReadString().ToBigInteger();
  var C: array[,] of BigInteger := new BigInteger[N, K];
  for var j := 1 to K - 1 do
    C[0, j] := 0;
  for var i := 0 to N - 1 do
    C[i, 0] := 1;
  for var i := 1 to N - 1 do
    for var j := 1 to K - 1 do
      C[i, j] := C[i - 1, j] + C[i - 1, j - 1];
  var possible := 'a';
  while K > 0 do
  begin
    if M <= C[N - 1, K - 1] then
    begin
      write(possible);
      dec(K);
    end
    else
      M := M - C[N - 1, K - 1];
    dec(N);
    inc(possible);
  end;
end.

Без BigInteger:
begin
  var N, K: integer;
  var M: longint;
  read(N, K, M);
  var C: array[,] of longint := new longint[N, K];
  for var j := 1 to K - 1 do
    C[0, j] := 0;
  for var i := 0 to N - 1 do
    C[i, 0] := 1;
  for var i := 1 to N - 1 do
    for var j := 1 to K - 1 do
      C[i, j] := C[i - 1, j] + C[i - 1, j - 1];
  var possible := 'a';
  while K > 0 do
  begin
    if M <= C[N - 1, K - 1] then
    begin
      write(possible);
      dec(K);
    end
    else
      M := M - C[N - 1, K - 1];
    dec(N);
    inc(possible);
  end;
end.
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота