Zadanie z informatyki – obsługa windy

0

Witam mam takie zadanko nie moge go wykonac poprawnie.
Jest takie zadanie "W budynku mieszkalnym znajduje się winda, której maksymalne obciążenie to 900 kg. Z windy chce skorzystać pewnia liczba osób, w tym:

2 osoby o wadze 52 kg i wzroście 160 cm
1 osoba o wadze 52 kg i wzroście 158 cm
4 osoby o wadze 27 kg i wzroście 125 cm
2 osoby o wadze 102 kg i wzroście 180 cm
4 osoby o wadze 78 kg i wzroście 172 cm
3 osoby o wadze 64 kg i wzroście 160 cm
2 osoby o wadze 64 kg i wzroście 170 cm
3 osoby o wadze 47 kg i wzroście 150 cm
4 osoby o wadze 92 kg i wzroście 179 cm

Ile osób i o jakiej wadze powinno wsiąść do windy w pierwszej kolejności, aby całkowita suma ich wysokości (czyli wzrostu) była największa? Podaj specyfikację zadania oraz zaproponuj algorytm rozwiązujący ten problem metodą zachłanną i zapisz go w postaci programu." język C++ .

To co mam to taki kod. z gory dzięki

#include <iostream>

using namespace std;

int main()
{

int wagawindy=900;

int wagi[25]= {52,52,52,27,27,27,27,102,102,78,78,78,78,64,64,64,64,64,47,47,47,92,92,92,92};
int wzrost[25]= {160,160,158,125,125,125,125,180,180,172,172,172,172,160,160,160,170,170,150,150,150,179,179,179,179};

float proporcje[25];
for(int i=0; i<25; i++) proporcje[i]=wzrost[i]/wagi[i];

int zamiana;
do
{
    zamiana=0;
    for (int i=0; i<25; i++)
    {
        if (proporcje[i]>proporcje[i+1])
        {
            zamiana=zamiana+1;
            swap(proporcje[i],proporcje[i+1]);
            swap(wagi[i],wagi[i+1]);
            swap(wzrost[i],wzrost[i+1]);
        }
    }
}
while(zamiana!=0);
cout<<" do windy zmieści się osoba o: ";
for(int k=0; k<25; k++)
    if(wagi[k]<wagawindy)
    {
        wagawindy-=wagi[k];
        cout<<"wadze"<<wagi[k]<<" i "<<"wzroscie"<<wzrost[k]<<endl;

    };

return 0;

}
0

Nie bardzo rozumiem, nie umiesz wykonać sortowania?

0
proporcje[i]=wzrost[i]/wagi[i];

Tak na pierwszy rzut oka to dzielenie nie da ci poprawnych wyników. Dzielenie int / int daje int. Tracisz wszystko co jest po przecinku. (175/80 = 2).

Jakie jest pytanie?

0

Metoda zachłaności opiera się na tym, że:

  1. Wpychasz do winy randomową(bez powtórzeń) osobę,
  2. sprawdzasz czy nie przekraczasz maksymalnej wagi windy,
    2.1. jeśli nie: to powtórz
    2.2 jeśłi tak: wyświetl osoby w windzie.

Skąd wiesz, że będzie 25propozycji?

Edit: Wydaje mi się, że zamiast tworzyć tablicę i wypisywać osoby po kolei, to można byłoby zrobić tablicę odpowiadającą liczbie osób, druga sumującą ich wzrost, trzecią sumującą ich wagę.

Edit2:
Może jeszcze troszeczkę wyjaśnie.

Jak mówi treść zadania nie każdy chce sam wsiadać do windy, częściej mamy grupy ludzi. Także wypadałoby z tego skorzystać:

int ilośćGrupy = 9
int ilośćOsób[ilośćGrup] = {2,1,4 , ...};
int wagaGrupy = { ilośćOsób[0]*52 , ilośćOsób[1]*52, ilośćOsób[2]*27, ... };
int wzrotGrupy = { ilośćOsób[0]* 160, ilośćOsób[1]*158, ilośćOsób[2]*125, ...};

for(int i = 0; i < ilośćOsób.size(); i++){
int liczbaOsób = ilośćOsób[i]; //początkowa liczba osób
int wagaOsób = wagaGrupy[i] //początkowa waga osób
int wzrotosób = wzrostGrupy[i] //początkowy wzrot

//TO-DO
//Zastosowanie algorytmu zachłannego
}
0

Taka mała uwaga nie rób czegoś takiego: int wagi[25] , bo w większych projektach za kilka dni/tygodni nie bedziesz pamietal skad to 25. Zamiast tego zrób np. const int liczba_osob =25. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1