Ustawianie liczb w tablicy t[9]
Ostatnio zmodyfikowano 2019-12-01 13:19
kwdrt3000 Temat założony przez niniejszego użytkownika |
Ustawianie liczb w tablicy t[9] » 2019-12-01 00:33:17 Dzień dobry, Zajmuję się zadaniem o treści: Dana jest tablica int t[9]. t[0]=1. Wypisać wszystkie możliwe ustawienia liczb aby spełniały warunki: wartości na sąsiednich polach muszą różnić się o co najmniej 2 i obok siebie nie mogą znajdować się 2 liczby pierwsze. Oto kod który opracowałem: #include <iostream> #include <cmath> using namespace std;
bool pierw( int l ) { if( l == 1 ) return false; for( int i = 2; i < sqrt( l ); i++ ) { if( l % i == 0 ) return false; } return true; } bool mozliw( int t[ 9 ], int p, int l ) { if( pierw( p ) and pierw( l ) ) return false; if( abs( l - p ) < 2 ) return false; for( int i = 0; i < 9; i++ ) { if( t[ i ] == l ) return false; } return true; }
void tabprn( int tab[ 9 ] ) { for( int i = 0; i < 9; i++ ) { cout << tab[ i ] << " "; } cout << endl; }
void kombo( int t[ 9 ], int pos, int pop ) { t[ pos - 1 ] = pop; if( pos == 9 ) tabprn( t ); for( int i = 2; i < 10; i++ ) { if( mozliw( t, pop, i ) ) kombo( t, pos + 1, i ); } }
int main() { int t[ 9 ]; for( int i = 0; i < 9; i++ ) { t[ i ] = 0; } t[ 0 ] = 1; kombo( t, 1, 1 ); return 0; }
Po uruchomieniu dzieje się... cóż, nic. Gdzie w moim kodzie/rozumowaniu tkwi błąd? Dziękuję za pomoc. |
|
pekfos |
» 2019-12-01 00:51:24 Brzmi jakbyś miał wczytać od użytkownika tablicę i tylko wypisać jej niektóre permutacje. Gdybyś miał sam wymyślać liczby, rozwiązań jest niepraktycznie wiele. |
|
kwdrt3000 Temat założony przez niniejszego użytkownika |
» 2019-12-01 00:57:09 Przepraszam, pominąłem istotną informację: każdą liczbę od 1-9 można wykorzystać tylko raz, przy czym ustawiamy te liczby. |
|
pekfos |
» 2019-12-01 13:19:26 To zmienia wszystko. Przy tak ograniczonej dziedzinie liczb, nie ma sensu implementować testu pierwszości. Po prostu zrób sobie tablicę w gotowymi wynikami, zwłaszcza że twoja implementacja jest błędna (dla 4 i 9 zwróci że są pierwsze). Funkcja mozliw() nie uwzględnia stopnia wypełnienia tablicy, więc kiedy początkowe zera będą nadpisane, zachowanie będzie błędne. |
|
« 1 » |