Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Препоръчан отговор


Здравейте! Изпитвам затруднение с една задача по програмиране C++.

Някой може ли да ми помогне?  

За тези, които  няма да помагат и ще пишат безсмислени  коментари  от типа на: тази задача е лесна, научи: циклите,операторите и функциите и тогава пиши форум - моля да напуснат! Знам всички оператори, функции и цикли. Не съм назад с материала. :)

Благодаря за вниманието! 

Ето го и условието!

 

Дадено:

Мед:

1кг акациев - А1 лева
1кг. липов -А2 лева
1кг.слънчогледов - А3 лева.


Има 3 съда:
1 съд - B1 кг.
2 съд - B2 кг.
3 съд - B3 кг.
В кой съд какъв мед да сложи така че да получи най-много пари?

 

Решение:

Вход: ред 1 -> числата A1  A2  A3
Ред 2: числата B1 B2 и B3

Изход: едно число - максималната печалба, която може да се получи.

Пример: Вход -> 7 2 9
10 5 3

Изход: 131лв.

 

Пускам и cpp файла 

 

task4.cpp

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Нещо не разбирам условието на задачата. 1 КГ МЕД си е 1 КГ МЕД ако щеш го сложи в епруветка., И цената ще си е една и съща.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 10 минути, Емил Костов написа:

Нещо не разбирам условието на задачата. 1 КГ МЕД си е 1 КГ МЕД ако щеш го сложи в епруветка., И цената ще си е една и съща.

Образно казано. Или си представи, че всеки съд е с различна вместимост - 1,2,3 КГ. За задачата - намираш най-голямата цена на меда, след това най-големия буркан и умножаваш двете. Ако беше на джава, щях да ти я драсна набързо. Ако знаеш циклите, прецикляш набързо в 2 цикъла най-големите стойности и умножаваш накрая.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

@Raze май се търси всичко, т.е. да напълниш и трите съда. Ако съм прав, подреждат се и съдовете по големина от най-голям към най-малък (примерно от M1 до M3), различните видове мед по цена от най-скъп към най-евтин (от N1 до N3), и се умножават, и на изхода имаш M1*N1 + M2*N2 + M3*N3.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Да, прав си :)

Правят се 2 тримерни масива, в които се зареждат числата, след това и двата масива се сортират, без значение дали първо ще са най-големите или на-малките числа, въпроса е ако сортираш единия масив с начало най-голямото число, така да направиш и другия или обратното, след това се умножават и събират стойностите от всеки масив.


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Сложил съм doble за да може бурканя да е 2.5 кг примерно, а меда с цена 9.54 лв

Като гледам резултата, за най-голяма сума слагаш най-скъпия мед в най-големия буркан и най-евтиния в най-малкия. 

#include <iostream>

using namespace std;

void swap (double &x, double &y)
{
     double t = x;
     x = y;
     y = t;
}
    
int main ( )
{

    double A1, A2, A3, B1, B2, B3, SUM;

    cout <<"A1 = "; cin>>A1;
    cout <<"A2 = "; cin>>A2;
    cout <<"A3 = "; cin>>A3;
    cout <<"B1 = "; cin>>B1;
    cout <<"B2 = "; cin>>B2;
    cout <<"B3 = "; cin>>B3;
    
    if (A1<A2) swap(A1,A2);
    if (A2<A3) swap(A2,A3);
    if (A1<A2) swap(A1,A2);
    
    if (B1<B2) swap(B1,B2);
    if (B2<B3) swap(B2,B3);
    if (B1<B2) swap(B1,B2);
    
    SUM=A1*B1+A2*B2+A3*B3;
    
    cout<<A1<<" * "<<B1<<" + "<<A2<<" * "<<B2<<" + "<<A3<<" * "<<B3;
    cout<<" = "<<SUM<<endl;

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 7 часа, ined написа:

Сложил съм doble за да може бурканя да е 2.5 кг примерно, а меда с цена 9.54 лв

Като гледам резултата, за най-голяма сума слагаш най-скъпия мед в най-големия буркан и най-евтиния в най-малкия. 

#include <iostream>

using namespace std;

void swap (double &x, double &y)
{
     double t = x;
     x = y;
     y = t;
}
    
int main ( )
{

    double A1, A2, A3, B1, B2, B3, SUM;

    cout <<"A1 = "; cin>>A1;
    cout <<"A2 = "; cin>>A2;
    cout <<"A3 = "; cin>>A3;
    cout <<"B1 = "; cin>>B1;
    cout <<"B2 = "; cin>>B2;
    cout <<"B3 = "; cin>>B3;
    
    if (A1<A2) swap(A1,A2);
    if (A2<A3) swap(A2,A3);
    if (A1<A2) swap(A1,A2);
    
    if (B1<B2) swap(B1,B2);
    if (B2<B3) swap(B2,B3);
    if (B1<B2) swap(B1,B2);
    
    SUM=A1*B1+A2*B2+A3*B3;
    
    cout<<A1<<" * "<<B1<<" + "<<A2<<" * "<<B2<<" + "<<A3<<" * "<<B3;
    cout<<" = "<<SUM<<endl;

 

Благодаря ти много!

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Това е вид "транспортна задача". Намерете алгоритъма за решаване на въпросната. До колкото си спомням бяха два метода.

Потърсете  някой математик. Това не е проблем по програмиране, а на математическите Ви способности.

Успех!

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

@ined този алгоритъм не ми изглежда много ефективен. Ако се наложи да се увеличава размера на масива или е много по-голям, за всеки елемент ли ще правиш ръчна проверка? Много по-добре е да се направи така:

https://www.geeksforgeeks.org/sort-c-stl/

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Алгоритъма си е Bubble Sort , никъде не съм твърдял че е много ефективен, но за само 3 елемента си е достатъчно добър, даже може да мине и без масиви и цикли.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Така е, но по-добре го направи с цикъл. Дори и автора да е начинаещ в програмирането е добре да се учи да пише хубав код:

https://www.geeksforgeeks.org/bubble-sort/

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ето математическа идея за решението.

Дадени са цените A[0], A[1], A[2] за 1 kg.

Дадени са и вместимостите на съдовете B[0], B[1], B[2] във kg.

Общата цена е p:

B[0]*x + B[1]*y + B[2]*z = p

където

x,y,z in {A[0], A[1], A[2]}

Търси се тройка не равни помежду си (x,y,z), при която се достига максимума на функцията p:
(x,y,z) => max p


Основната част на програмата, която (тъпо) изрежда всички пермутации на трите {A[0], A[1], A[2]}:

pmax = B[0] * A[0] + B[1] * A[0] + B[2] * A[0];
M[0] = 0;
M[1] = 0;
M[2] = 0;
for(i = 0; i < 3; i++) {
  for(j = 0; j < 3; j++) {
    for(k = 0; k < 3; k++) {
      p = B[0] * A + B[1] * A[j] + B[2] * A[k];
      if ((p > pmax) && (i != j) && (i != k) && (j != k)) {
          pmax = p;
          M[0] = i;
          M[1] = j;
          M[2] = k;
      }
    }
  }
}

Максимално достижимата цена е pmax,
при (A[M[0]], A[M[1]], A[M[2]]).

 

Поправка, нещо липсваше, трябва да бъде:

 p = B[0]  * A + B[1] * A[j] + B[2] * A[k];

 

но на първото A не се изписа индекс i

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

И ако бурканите и видовете мед са не по 3, а по 10, правиш 10 вложени цикъла? Чудно!

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Аз мисля, че сме решили задачата - сортират се масивите, както съм обяснил и след това се умножават и събират елементите последователно.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 17 часа, NVJ написа:

Ето математическа идея за решението.

.....

Според твойта "математическа" идея пермутации се смятат с цикли и проверки ама не е така, ко правим с 10 елемента - ще се накъсаме от циклене :)

Само с 5 размени на два елемента се изреждат всичките 6 пермутации на 3 елемента, а не проверяваш 27 вариации дали няма в тях повтарящи се елементи,

A  B  C
1  2  3   swap(A,B)
2  1  3   swap(B,C)
2  3  1   swap(A,B)
3  2  1   swap(B,C)
3  1  2   swap(A,B)
1  3  2

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.


  • Разглеждащи това в момента   0 потребители

    Няма регистрирани потребители разглеждащи тази страница.

  • Подобни теми

    • от georgi999
      Здравейте от доста време ме затрудняват едни въпросчета между които винаги си мисля че има повече верни .Благодаря предварително
      1ВЪПРОС-Кое от следните твърдения е вярно
      А)всеки път когато създаваме и компилираме нов клас се създава съответен обект от class
      Б)всеки път когато създаваме и компилираме нов клас се създава класа class
      В) jvm не използва класа class
      2ВЪПРОС -кое от твърденията не е вярно ?
      А) конструкторите могат да се задават подразбиране
      Б)конструкторите са полиморфни и претоварени
      В)конструкторите не са полиморфни но са претоварени
      3 ВЪПРОС- Кое от следните твърдения не е вярно ?
      А)final, референция не означава че не може да се променя рефенираният от нея обект
      Б)всички private методи в един клас по подразбиране са final и могат да бъдат предефинирани 
      В)final референция означава че не може да се обвърже повторно в нови обекти.
    • от Jay Ed
      Здравейте! Имам проблем с една задачка по програмиране. Ще се радвам, ако успеете да ми помогнете! :)
      "Да се създаде програма, която пресмята лице на определен брой квадрати и определя кой от тях е с най - малка площ. Да се декларира структура, описваща квадрат чрез страна квадрата, да се дефинира масив от квадрати и масив от площите на тези квадрати. Търсенето на площ на квадрат, както и на най - малката стойност, да се реализира с отделни функции."
    • от Анита Христова Трифонова
      Трудна задача - текст, вокал, пиано А.Х.Т. sekirata cekupama
    • от Wilhelm
      Здравейте, трябва ми спешна помощ за решение на тази задача по два варианта най-късно до утре! Ще съм ви длъжен!
       
       
    • от FlippyBG
      Здравейте хора, кякой може ли да каже как да оправя програмата. Мерси предварително.
      Да се направи функция за копиране на дадена опашка C++ 
       
      #include <iostream>
      using namespace std;
      struct elem
      {
          int key; elem *next;
      };
      void push(elem * &first, elem * &last, elem * p, int n);
      int pop(elem * &first, elem * &last, elem * &p, int &n);
      void copyQueue(elem * first, elem * last, elem * p, elem * &first2, elem * &last2, elem * &p2, int num);
      int main()
      {
          int num;
          elem *first = NULL, *last = NULL, *p;
          elem *first2 = NULL, *last2 = NULL, *p2;

          cout << "\n ~~~ Enter a symbol to stop entering numbers ~~~\n";
          cout << "\n Enter numbers:  \n";
          while (cin >> num)
              push(first, last, p, num);
          cout << "\n The numbers are:  \n";
          //while (pop(first, last, p, num))
      //    {
      //        cout << num << " ";
      //    }

          copyQueue(first, last,p , first2, last2, p2, num);
          while (pop(first2, last2, p2, num))
          {
              cout << num << " ";
          }
          cout << "\n";
          while (pop(first, last, p, num))
          {
              cout << num << " ";
          }
      }
      void push(elem * &first, elem * &last, elem * &p, int n)
      {
          p = last;
          last = new elem;
          last->key = n;
          last->next = NULL;
          if (p != NULL) p->next = last;
          if (first == NULL)
          {
              first = last;
          }
      }
      int pop(elem * &first, elem * &last, elem * &p, int &n)
      {
          if (first)
          {
              n = first->key;
              p = first;
              first = first->next;
              if (first == NULL) last = first;
              delete p;
              return 1;
          }
          else
              system("pause");
          return 0;
      }
      void copyQueue(elem * first, elem * last, elem * p, elem * &first2, elem * &last2, elem * &p2, int num)
      {
          while (pop(first, last, p, num))
          {
              push(first2, last2, p2, num);
          }
      }
       
  • Дарение

×
×
  • Добави ново...