Nic tutaj nie widać. Powinieneś wkleić testy w okienko stdin a nie w treść i tak już przydługiego swojego programu --> tutaj widać, że jednak nie działa: https://ideone.com/OsdBGh, a te 5 przypadków, to dużo za mało. Musisz dodać więcej przypadków [np swoich].
int totalSum = 45; // Suma w linii od 1 do 9 zawsze wynosi 45 - kryterium prawdy ulozenia liczb w Sudoku
Nie jest to kryterium prawdy, już Ci o tym pisałem. Jedynym prawdziwym kryterium jest to, że w danym “kawałku” sudoku mają wystąpić wszystkie liczby z zakresu 1…9. I to jest prawda, tylko prawda i cała prawda i jedyne kryterium. To że zupełnie przez przypadek
suma tych liczb wynosi 45 a iloczyn równa się 9! [dziewięć silnia] to już nie jest istotne i w swoim programie nie musisz tego faktu wykorzystywać, a najlepiej zapomnij. Sprawdzaj tylko czy są wszystkie liczby z zakresu [1.9].
Czemu nie, jak jest to dobrze zrobione to działą. Też tak robię/robiłem, ale tylko w tych zadaniach, kiedy nie wiadomo ile tych liczb będzie do wczytania w linii. Tutaj wiadomo, że będzie ich dokładnie 9 [w linii], a to czy są odzielone spacją czy enterem [czy tabulatorem czy innym dowolnym białym znakiem - są jeszcze jakieś inne białe?
] nie ma znaczenia. Funkcja cin [scanf] tutaj w tym zadaniu doskonale sobie z takim wczytaniem poradzi, na przykład w taki sposób jak podałem wyżej. Scanf/cin rfadzi sobie w takich wypadkach także doskonale, gdy dowolnych białych znaków jest dowolnie więcej niż jeden lecz jeden minimum.
Tak zupełnie na marginesie i na przyszłość: Moim zdaniem, funkcja nie powinna zajmować się drukowaniem wyniku “TAK/NIE”, a tylko zwracać wartość true/false. Dopiero program używający funkcji [tu main] decyduje, co zrobić z tą wartością [tutaj dopiero main powinien drukować TAK/NIE].
Moja propozycja. Napisz program zupełnie od zera i od nowa z dzisiejszą swoją wiedzą.
Nie, żeby Cię pognębić, ale abyś zdawał sobie sprawę o czym piszę i do czego powinieneś dążyć, odchudzając swój program - mój pierwszy AC program to 37 linijek [C] w tym 5 linii pustych, dwie zakomentowane i 3 tylko z ‘}’.
Używam formatu;
for (.....) {
.....
}
a jeżeli nawiasy są zbędne to ich nie używam.
Mój dzisiejszy program w C++ to 31 linijek kodu, w tym 2 puste i 4 z zamykającym ‘}’. Piszę o pustych liniach, bo wszystko można oczywiście upchać do jednej linii, ale przecież nie o to chodzi.
Mam też:
if (sprSudoku (sudokuArray)) cout << "TAK\n";
else cout << "NIE\n";
co może powinno być zapisane w 4 linijkach co dałoby 33 linijki kodu.