В
Все
М
Математика
О
ОБЖ
У
Українська мова
Д
Другие предметы
Х
Химия
М
Музыка
Н
Немецкий язык
Б
Беларуская мова
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
Р
Русский язык
У
Українська література
Ф
Французский язык
П
Психология
А
Алгебра
О
Обществознание
М
МХК
В
Видео-ответы
Г
География
П
Право
Г
Геометрия
А
Английский язык
И
Информатика
Қ
Қазақ тiлi
Л
Литература
И
История
choserge
choserge
26.03.2021 03:43 •  Информатика

Сколько файловых архивов размером по 900 Мбайт каждый можно записать на диск D, не стирая уже имеющуюся на нём информацию?


Сколько файловых архивов размером по 900 Мбайт каждый можно записать на диск D, не стирая уже имеющу

Показать ответ
Ответ:
vadim88768
vadim88768
13.07.2021 04:04
Вариант понимания условия №1. Мы достаём монеты по одной, и порядок монет важен (т.е., например, если мы вытащили сначала монету 1 рубль, потом 5 рублей и если сначала 5 рублей, потом 1 рубль - разные
Обозначим C(n) - число набрать n рублей. Очевидно, C(n) = C(n-1) + C(n-2) + C(n-5) + C(n-10) [Представим себе. что мы знаем число набрать n-5 рублей. Тогда если мы уверены, что последней вытащили 5-рублёвую монету, то будет C(n). Финальный ответ - сумма по всем возможным выборам последней монеты]
Полагая C(n) = 0 при всех n < 0, C(0) = 1, получим по этой формуле
С(66) = 1431020833989040 
Cчитать можно, например, такой программой:
var  C: array[-9..66] of BigInteger;
begin
  for var i := -9 to -1 do
    C[i] := 0;
  C[0] := 1;
  for var i := 1 to 66 do
    C[i] := C[i - 1] + C[i - 2] + C[i - 5] + C[i - 10];
  print(C[66]);
end.
Вариант понимания условия №2. Нам порядок выдачи не важен. Тогда вопрос по сути сводится к числу целых неотрицательных решений уравнения
x + 2y + 5z + 10t = 66, где x, y, z, t - число 1-, 2-, 5- и 10-рублёвых монет соответственно.
Тут можно написать общую формулу, но она будет объемной, так что вычислять по ней совсем не радостно (даже с компьютером). Поэтому проще все варианты перебрать. ответ получится 700.
Пример программы:
begin
  var count := 0;
  for var t := 0 to 6 do
    for var z := 0 to (66 - 10*t) div 5 do
      for var y := 0 to (66 - 10*t - 5*z) div 2 do
        inc(count);
  print(count);
end.

Подобным образом можно считать и вручную. По сути нам требуется вычислить сумму [1 + (66 - 10t - 5z)/2] по всем допустимым t, z ([x] - целая часть x). Перебираем сначала t, потом z:
t = 0. z = 0,1,2,...,13. Вклад в сумму 34 + 31 + 29 + 26 + 24 + 21 + 19 + 16 + 14 + 11 + 9 + 6 + 4 + 1 = 245.
t = 1. z = 0,1,2,...,11. Легко понять, что здесь будут все числа без первых двух слагаемых: 29 + 26 + 24 + 21 + 19 + 16 + 14 + 11 + 9 + 6 + 4 + 1 = 245 - 34 - 31 = 180
Аналогично, t = 2: 180 - 29 - 26 = 125
t = 3: 125 - 26 - 21 = 80
t = 4: 80 - 19 - 16 = 45
t = 5: 45 - 14 - 11 = 20
t = 6: 20 - 9 - 6 = 5
Итого 245 + 180 + 125 + 80 + 45 + 20 + 5 = 700
0,0(0 оценок)
Ответ:
millyby1
millyby1
17.11.2021 19:53

Заменить в группах символов, состоящих только из цифр, все цифры предыдущими по значению цифрами, а '0' заменить на точку. Например, строка: ‘ 6е-1 75 bа12 123‘ ; результат: ‘ 6е-1 64 bа12 012‘

code: #pascaluses crt;varbo,bb:boolean;b3,b2,sc,ss,b,s:string;t,p,cc,j,e,i,c:integer;begin clrscr; sc:='0123456789'; writeln('VVEDITE STROKU'); readln(s); s:=s+' '; c:=length(s); for i:=1 to c do begin b:=copy(s,i,1); if b<>' ' then ss:=ss+b else begin cc:=length(ss); bo:=true; for j:=1 to cc do begin b2:=copy(ss,j,1); bb:=false; for t:=1 to 10 do begin b3:=copy(sc,t,1); if b3=b2 then bb:=true;end; if bb=false then bo:=false;end; if bo=true then  begin for j:=1 to cc do begin b2:=copy(ss,j,1); val(b2,p,e); if p=0 then write('.') else write(p-1);end; write(' '); end else write(ss,' '); ss:='';end;end;readkey;end.
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота