Informatika2-2012/Hazi04
A MathWikiből
4. házi feladat: Sudoku megoldását segítő kis program
A Sudoku egy számkitöltögetős játék, amit általában 9x9-es táblán játszanak.
A feladat, hogy egészítsd ki a lenti C kódot (legalább) hat függvénnyel, melyek a következő feladatokat végzik el:
- kitölti a táblát 0 értékekkel (void ures_tabla() , ez már meg is van hívva a main()-ben)
- eldönti hogy egy adott sorban szerepelhet-e egy adott érték (vagyis hogy nincs még ott olyan)
- eldönti hogy egy adott oszlopban szerepelhet-e egy adott érték (vagyis hogy nincs még ott olyan)
- egy pozícióhoz (sor, oszlop) meghatározza annak a 3x3-as kis négyzetnek a határait, amibe az tartozik. (itt mivel több értéket kellene egyszerre visszaadni, használj mutatót paraméterként!)
- eldönti hogy egy adott pozíción szerepelhet-e egy adott érték a pozícióhoz tartozó 3x3-as négyzetben levő számokat tekintve (vagyis hogy nincs még ott olyan) (használd az előző függvényt)
- eldönti hogy egy adott pozícióban(sor és oszlop) szerepelhet-e egy adott érték (int lehet_e_itt(int ertek, int sor, int oszlop) , ez használja az előzőeket)
Nem kötelező, de a main() függvényt kiegészítheted azzal, hogy érvénytelen bemenet (1-nél kisebb vagy 9-nél nagyobb értékek) esetén 'H' betűt írjon ki.
A kód amit ki kell egészíteni
#include <stdio.h> int tabla[9][9]; /* A tábla: 5 3 0 0 7 0 0 0 0 6 0 0 1 9 5 0 0 0 0 9 8 0 0 0 0 6 0 8 0 0 0 6 0 0 0 3 4 0 0 8 0 3 0 0 1 7 0 0 0 2 0 0 0 6 0 6 0 0 0 0 2 8 0 0 0 0 4 1 9 0 0 5 0 0 0 0 8 0 0 7 9 */ void tabla_kitolt() { tabla[0][0] = 5; tabla[0][1] = 3; tabla[0][4] = 7; tabla[1][0] = 6; tabla[1][3] = 1; tabla[1][4] = 9; tabla[1][5] = 5; tabla[2][1] = 9; tabla[2][2] = 8; tabla[2][7] = 6; tabla[3][0] = 8; tabla[3][4] = 6; tabla[3][8] = 3; tabla[4][0] = 4; tabla[4][3] = 8; tabla[4][5] = 3; tabla[4][8] = 1; tabla[5][0] = 7; tabla[5][4] = 2; tabla[5][8] = 6; tabla[6][1] = 6; tabla[6][6] = 2; tabla[6][7] = 8; tabla[7][3] = 4; tabla[7][4] = 1; tabla[7][5] = 9; tabla[7][8] = 5; tabla[8][4] = 8; tabla[8][7] = 7; tabla[8][8] = 9; } void ures_tabla() { /* ezt is meg kell írni... */ } /* és kell még néhány függvény... */ int main() { ures_tabla(); tabla_kitolt(); int ertek = 0; int sor, oszlop; printf("Sudoku segito program.\nSzokozokkel elvalasztva ird be a kerdeses erteket, a sort es az oszlopot(mindegyik ertek 1 - 9 kozotti lehet)! Ha szerepelhet az adott helyen az ertek akkor 'I'-t, ha nem akkor 'N'-et irok ki.\nHa a kapott keresendo ertek 0 akkor kilepek.\n"); do { scanf("%d %d %d", &ertek, &sor, &oszlop); if (ertek > 0 && ertek < 10) { if ( /* lehet_e_itt(...) függvény hívása */) { printf("I\n"); } else { printf("N\n"); } } } while (ertek > 0); return 0; }
Segítség a teszteléshez
Néhány bemenet és elvárt kimenet pár:
1 1 1 -> I 1 2 9 -> N 7 1 1 -> N 7 2 2 -> I