М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации

1) составьте программу которая вычисляет значение выражения k = x³-4xy (x+y²) 2) составьте программу, которая вычисляет количество секунд в заданном количестве часов по формуле c=3600 * h


1) составьте программу которая вычисляет значение выражения k = x³-4xy (x+y²) 2) составьте программу

👇
Открыть все ответы
Ответ:
sanya1897p08pyj
sanya1897p08pyj
30.09.2022

Рассмотрим следующую задачу. В обороте находятся банкноты k различных номиналов: a1, a2, ..., ak рублей. Банкомат должен выдать сумму в N рублей при минимального количества банкнот или сообщить, что запрашиваемую сумму выдать нельзя. Будем считать, что запасы банкнот каждого номинала неограничены.

Рассмотрим такой алгоритм: будем выдавать банкноты наибольшего номинала, пока это возможно, затем переходим к следующему номиналу. Например, если имеются банкноты в 10, 50, 100, 500, 1000 рублей, то при N = 740 рублей такой алгоритм выдаст банкноты в 500, 100, 100, 10, 10, 10, 10 рублей. Подобные алгоритмы называют «жадными», поскольку каждый раз при принятии решения выбирается тот вариант, который кажется наилучшим в данной ситуации (чтобы использовать наименьшее число банкнот каждый раз выбирается наибольшая из возможных банкнот).

Но для решения данной задачи в общем случае жадный алгоритм оказывается неприменимым. Например, если есть банкноты номиналом в 10, 60 и 100 рублей, то при N = 120 жадный алгоритм выдаст три банкноты: 100 + 10 + 10, хотя есть использующий две банкноты: 60 + 60. А если номиналов банкнот только два: 60 и 100 рублей, то жадный алгоритм вообще не сможет найти решения.

Но эту задачу можно решить при метода динамического программирования. Пусть F(n) -- минимальное количество банкнот, которым можно заплатить сумму в n рублей. Очевидно, что F(0) = 0, F(a1) = F(a2) =...= F(ak) = 1. Если некоторую сумму n невозможно выдать, будем считать, что F(n) = $ \infty$ (бесконечность).

Выведем рекуррентную формулу для F(n), считая, что значения F(0), F(1), ..., F(n - 1) уже вычислены. Как можно выдать сумму n? Мы можем выдать сумму n - a1, а потом добавить одну банкноту номиналом a1. Тогда нам понадобится F(n - a1) + 1 банкнота. Можем выдать сумму n - a2 и добавить одну банкноту номиналом a2, для такого понадобится F(n - a2) + 1 банкнота и т. д. Из всевозможных выберем наилучший, то есть:

F(n) = min(F(n - a1), F(n - a2),..., F(n - ak)) + 1.

Теперь заведем массив F[n+1], который будем последовательно заполнять значениями выписанного рекуррентного соотношения. Будем предполагать, что количество номиналов банкнот хранится в переменной int k, а сами номиналы хранятся в массиве int a[k].

const int INF=1000000000; // Значение константы }бесконечность}

int F[n+1];

F[0]=0;

int m, i;

for(m=1; m<=n; ++m) // заполняем массив F

{ // m - сумма, которую нужно выдать

F[m]=INF; // помечаем, что сумму m выдать нельзя

for(i=0; i<k; ++i) // перебираем все номиналы банкнот

{

if(m>=a[i] && F[m-a[i]]+1<F[m])

F[m] = F[m-a[i]]+1; // изменяем значение F[m], если нашли

} // лучший выдать сумму m

}

После окончания этого алгоритма в элементе F[n] будет храниться минимальное количество банкнот, необходимых, чтобы выдать сумму n. Как теперь вывести представление суммы n при банкнот? Опять рассмотрим все номиналы банкнот и значения n - a1, n - a2, ..., n - ak. Если для какого-то i окажется, что F(n - ai) = F(n) - 1, значит, мы можем выдать банкноту в ai рублей и после этого свести задачу к выдаче суммы n - ai, и так будем продолжать этот процесс, пока величина выдаваемой суммы не станет равна 0:

if (F[n]==INF)

cout<<"Требуемую сумму выдать невозможно"<<endl;

else

while(n>0)

for(i=0;i<k;++i)

if (F[n-a[i]]==F[n]-1)

{

cout<<a[i]<<" ";

n-=a[i];

break;

}

не удаляйте это

4,6(34 оценок)
Ответ:
kurbatovmaximp08xa1
kurbatovmaximp08xa1
30.09.2022
Program aaa;
type   
   t=array[1..30] of integer;
var   
   a:t;   
   i,h,max,max1,y:integer;   
   q,c:real;
procedure chet(a:t);   
   var     
      i,z:integer;   
   begin     
      z:=0;     
      for i:=1 to 30 do         
      if(odd(a[i])=false) then inc(z);     
      writeln(z);   
   end;
begin   
   for i:=1 to 30 do     
      read(a[i]);   
   //1   
   chet(a);   
   //2   
   h:=0;   
   c:=0;   
   for i:=1 to 30 do     
      if((a[i] mod 3 = 0) and (a[i] mod 9 <> 0) and (a[i]>9) and (a[i]<100)) then begin                 inc(h);     
         c:=c+a[i];   
      end;   
   if(h=0) then writeln(-1)     
    else writeln(c/h);   
   //3   
   h:=0;   
   max:=0;   
   for i:=1 to 30 do begin     
      if((odd(a[i])=false) and (y=0)) then begin           
         h:=i;           
         y:=1;           
         continue;     
      end;     
      if((y>0) and ((odd(a[i])=false))) then          
         inc(y)       
       else         
        if(y>max) then begin           
           max:=y;           
           max1:=h;           
           y:=0;         
       end           
        else y:=0;   
   end;   
   for i:=max1 to max+max1-1 do     
      write(a[i],' ');   
   writeln;   
   //4   
   readln(h);   
   y:=a[h];   
   for  i:=h to 29 do     
      a[i]:=a[i+1];   
   for i:=1 to 29 do     
      write(a[i],' ');   
   for i:=29 downto h do     
      a[i+1]:=a[i];   
   a[h]:=y;   
   writeln;   
   //5   
   max:=0;   
   max1:=0;   
   for i:=1 to 30 do begin     
      if(a[i]>max) then begin         
         max1:=max;         
         max:=a[i];     
      end;     
      if((a[i]>max1) and (a[i]<max)) then          
         max1:=a[i];   
   end;   
   writeln(max1);
end.
4,4(36 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ