Problem Plecakowy
Ostatnio zmodyfikowano 2022-04-19 17:23
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. #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; }
|
|
DejaVu |
» 2022-04-19 17:23:42 Zakładam, że rozwiązałeś już problem, ale źle masz napisaną pętlę: 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ć: for( int j = 0; j < N - 1; j++ ) for( int i = j + 1; i < N; i++ )
|
|
« 1 » |