Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem Plecakowy

Ostatnio zmodyfikowano 2022-04-19 17:23
Autor Wiadomość
farethh
Temat założony przez niniejszego użytkownika
Problem Plecakowy
» 2022-04-09 16:25:25
Witam, siedzę od 2h nad tym kodem i nie rozumiem dlaczego sortowanie raz działa poprawnie, raz częściowa, a raz wcale. Proszę o pomoc.

C/C++
#include <iostream>
#include <fstream>
#include <algorithm>
#include <time.h>

using namespace std;

const int N = 5;

struct przedmiot
{
   
int wart, waga;
};

void Sortuj( przedmiot item[ ] )
{
   
float stosunek[ N ];
   
int pom;
   
for( int i = 0; i < N; i++ )
   
{
       
stosunek[ i ] =( float( item[ i ].wart ) / item[ i ].waga );
       
cout << stosunek[ i ] << endl;
   
}
   
   
for( int j = 0; j < N - 1; j++ )
   
{
       
for( int i = 0; i < N - 1; i++ )
       
{
           
if( stosunek[ i ] > stosunek[ i + 1 ] )
           
{
               
swap( item[ i ], item[ i + 1 ] );
           
}
        }
    }
   
   
   
}

int Plecak( przedmiot P[ ], int makswaga, int K[ ] )
{
   
int makswart = 0;
   
for( int i = 0; i < N; i++ )
   
{
       
K[ i ] = makswaga / P[ i ].waga;
       
makswaga = makswaga % P[ i ].waga;
       
makswart += K[ i ] * P[ i ].wart;
       
       
cout << "\nUzyto " << K[ i ] << " Przedmiotow nr " << i + 1;
   
}
   
cout << "\n\nPozostalo miejsca " << makswaga << endl;
   
return makswart;
}

void Losuj_Przedmioty( przedmiot item[ ] )
{
   
for( int i = 0; i < N; i++ )
   
{
       
cout << "Przedmiot " << i + 1;
       
item[ i ].wart = rand() % 10 + 1;
       
cout << " Wart przedmiotu " << " = " << item[ i ].wart;
       
item[ i ].waga = rand() % 10 + 1;
       
cout << " Waga przedmiotu " << " = " << item[ i ].waga << endl;
       
   
}
   
cout << "\n\n";
}

void Wypisz_Przedmioty( przedmiot item[ ] )
{
   
for( int i = 0; i < N; i++ )
   
{
       
cout << "Przedmiot " << i + 1;
       
cout << " Wart przedmiotu " << " = " << item[ i ].wart;
       
cout << " Waga przedmiotu " << " = " << item[ i ].waga << endl;
       
   
}
   
cout << "\n\n";
}

int main()
{
   
int makswaga = 100;
   
int Ilosc[ 5 ] = { 0, 0, 0, 0, 0 };
   
przedmiot item[ N ];
   
   
srand( time( NULL ) );
   
   
Losuj_Przedmioty( item );
   
Sortuj( item );
   
Wypisz_Przedmioty( item );
   
cout << "\nMaksymalna wartosc " << Plecak( item, makswaga, Ilosc );
   
   
   
return 0;
}
P-179389
DejaVu
» 2022-04-19 17:23:42
Zakładam, że rozwiązałeś już problem, ale źle masz napisaną pętlę:
C/C++
for( int j = 0; j < N - 1; j++ )
{
   
for( int i = 0; i < N - 1; i++ )
   
{
       
if( stosunek[ i ] > stosunek[ i + 1 ] )
       
{
           
swap( item[ i ], item[ i + 1 ] );
       
}
    }
}
Powinno być:
C/C++
for( int j = 0; j < N - 1; j++ )
for( int i = j + 1; i < N; i++ )
//...
   
P-179410
« 1 »
  Strona 1 z 1