gz08 Temat założony przez niniejszego użytkownika |
[c++] Warunki i składnia kodu sprawdzającego kombinacje » 2018-12-11 18:13:58 Witam, chciałem napisać prosty program który pomógłby mi znaleźć kombinacje spełniające pewien warunek(wiem że jest wykonalny). Niestety pętle działają w sposób niezrozumiały dla mnie. Proszę o pomoc/poprawienie kodu w miejscach w których moja nikła wiedza spowodowała błędy uniemożliwiające poprawne działanie programu. |
|
gz08 Temat założony przez niniejszego użytkownika |
» 2018-12-11 18:17:04 Oto kod #include <iostream>
using namespace std;
int main() { for( int i = 0; i <= 3; i++ ) { int wynik = 176; int silnik; if( i == 0 ) silnik = 0; else if( i == 1 ) { wynik += 10; silnik = 1; } else if( i == 2 ) { wynik += 18; silnik = 2; } else if( i == 3 ) { wynik += 29; silnik = 3; } for( int ii = 0; ii <= 3; ii++ ) { int uklad; if( ii == 0 ) uklad = 0; else if( ii == 1 ) { wynik += 6; uklad = 1; } else if( ii == 2 ) { wynik += 13; uklad = 2; } else if( ii == 3 ) { wynik += 17; uklad = 3; } for( int iii = 0; iii <= 3; iii++ ) { int opony; if( iii == 0 ) opony = 0; else if( iii == 1 ) { wynik += 7; opony = 1; } else if( iii == 2 ) { wynik += 15; opony = 2; } else if( iii == 3 ) { wynik += 22; opony = 3; } for( int j = 0; j <= 3; j++ ) { int zawieszenie; if( j == 0 ) zawieszenie = 0; else if( j == 1 ) { wynik += 7; zawieszenie = 1; } else if( j == 2 ) { wynik += 15; zawieszenie = 2; } else if( j == 3 ) { wynik += 22; zawieszenie = 3; } for( int jj = 0; jj <= 3; jj++ ) { int hamulce; if( jj == 0 ) hamulce = 0; else if( jj == 1 ) { wynik += 5; hamulce = 1; } else if( jj == 2 ) { wynik += 9; hamulce = 2; } else if( jj == 3 ) { wynik += 14; hamulce = 3; } for( int jjj = 0; jjj <= 3; jjj++ ) { int ecu; if( jjj == 0 ) ecu = 0; else if( jjj == 1 ) { wynik += 8; ecu = 1; } else if( jjj == 2 ) { wynik += 18; ecu = 2; } else if( jjj == 3 ) { wynik += 25; ecu = 3; } for( int k = 0; k <= 3; k++ ) { int wr; if( k == 0 ) wr = 0; else if( k == 1 ) { wynik += 4; wr = 1; } else if( k == 2 ) { wynik += 7; wr = 2; } else if( k == 3 ) { wynik += 11; wr = 3; } for( int kk = 0; kk <= 3; kk++ ) { int turbo; if( kk == 0 ) turbo = 0; else if( kk == 1 ) { wynik += 6; turbo = 1; } else if( kk == 2 ) { wynik += 13; turbo = 2; } else if( kk == 3 ) { wynik += 18; turbo = 3; } for( int kkk = 0; kkk <= 3; kkk++ ) { int nitro; if( kkk == 0 ) turbo = 0; else if( kkk == 1 ) { wynik += 6; turbo = 1; } else if( kkk == 2 ) { wynik += 13; turbo = 2; } else if( kkk == 3 ) { wynik += 19; turbo = 3; } if( wynik == 250 ) cout << silnik << " " << uklad << " " << opony << " " << zawieszenie << " " << hamulce << " " << ecu << " " << wr << " " << turbo << " " << nitro; } } } } } } } } } int a; cin >> a; return 0; }
|
|
pekfos |
» 2018-12-11 18:22:52 Kod jest strasznie przekombinowany. Najlepiej zacznij od jego uproszczenia. for( int i = 0; i <= 3; i++ ) { int wynik = 176; int silnik; if( i == 0 ) silnik = 0; else if( i == 1 ) { wynik += 10; silnik = 1; } else if( i == 2 ) { wynik += 18; silnik = 2; } else if( i == 3 ) { wynik += 29; silnik = 3; } silnik jest zawsze równe i, więc nie ma sensu robić z tego dwóch zmiennych. Wartość dodawana do wyniku powinna być przechowywana w tablicy, by nie musieć robić tylu warunków. int wartosc_silnik[ 4 ] = { 0, 10, 18, 29 };
for( int silnik = 0; silnik <= 3; silnik++ ) { int wynik = 176 + wartosc_silnik[ silnik ]; } |
|
gz08 Temat założony przez niniejszego użytkownika |
» 2018-12-11 18:44:14 Uprościłem kod, teraz wygląda dużo czytelniej i jest o połowę krótszy, jednak całość dalej nie wyświetla żadnego wyniku. Sprawdziłem czy warunek jest wykonywalny i ewidentnie jest (250=176+29+19+13+13). Wklejam kod po poprawkach. #include <iostream>
using namespace std;
int main() { int wartosc_silnik[ 4 ] = { 0, 10, 18, 29 }; int wartosc_uklad[ 4 ] = { 0, 6, 13, 17 }; int wartosc_opony[ 4 ] = { 0, 7, 15, 22 }; int wartosc_zawieszenie[ 4 ] = { 0, 5, 11, 17 }; int wartosc_hamulce[ 4 ] = { 0, 5, 9, 14 }; int wartosc_ecu[ 4 ] = { 0, 8, 18, 25 }; int wartosc_wr[ 4 ] = { 0, 4, 7, 11 }; int wartosc_turbo[ 4 ] = { 0, 6, 13, 18 }; int wartosc_nitro[ 4 ] = { 0, 6, 13, 19 }; for( int silnik = 0; silnik <= 3; silnik++ ) { int wynik = 176 + wartosc_silnik[ silnik ]; for( int uklad = 0; uklad <= 3; uklad++ ) { wynik += wartosc_uklad[ uklad ]; for( int opony = 0; opony <= 3; opony++ ) { wynik += wartosc_opony[ opony ]; for( int zawieszenie = 0; zawieszenie <= 3; zawieszenie++ ) { wynik += wartosc_zawieszenie[ zawieszenie ]; for( int hamulce = 0; hamulce <= 3; hamulce++ ) { wynik += wartosc_hamulce[ hamulce ]; for( int ecu = 0; ecu <= 3; ecu++ ) { wynik += wartosc_ecu[ ecu ]; for( int wr = 0; wr <= 3; wr++ ) { wynik += wartosc_wr[ wr ]; for( int turbo = 0; turbo <= 3; turbo++ ) { wynik += wartosc_turbo[ turbo ]; for( int nitro = 0; nitro <= 3; nitro++ ) { wynik += wartosc_nitro[ nitro ]; if( wynik == 250 ) cout << silnik << " " << uklad << " " << opony << " " << zawieszenie << " " << hamulce << " " << ecu << " " << wr << " " << turbo << " " << nitro; } } } } } } } } } int a; cin >> a; return 0; }
|
|
pekfos |
» 2018-12-11 19:03:29 Wszystkie wartości powinieneś zsumować w najbardziej zagnieżdżonej pętli. |
|
gz08 Temat założony przez niniejszego użytkownika |
» 2018-12-11 19:19:53 Dzięki za pomoc, działa, spodziewałem się że jest tych kombinacji mniej (jest ich coś koło 4000). Do zamknięcia. |
|
« 1 » |