Funktion verbessern
-
Nimm ein std::set
Wir sind im C-Forum...
-
zehforum schrieb:
Wir sind im C-Forum...
Sorry, hab ich nicht gesehen. Wenn du das tatsächlich in C machen willst, dann könntest du vielleicht auch eine Bibliothek nehmen, die entsprechende Datenstrukturen anbietet, z.B. apr. Oder du machst es per Bruteforce und gehst für jeden Eintrag die komplette Matrix durch und schaust, ob die da schon vorkommt. Da deine Matrix so klein ist, dürfte das noch gehen.
-
Wenn du Variablen wie a1, a2, a3 ... hast, dann bietet sich ein Array an.
int a[9] = {0};
In der Schleife kannst du dann zählen.
a[arr[i][j]-1]++; // vorher solltest du prüfen, ob arr[i][j] im richtigen bereich ist.
Und für die Überprüfung nimmst du auch eine Schleife
for (i=0;i<9;i++) if(a[i] .....) return ?? // bitte selber vervollständigen
-
Nehme einen Array mit 9 Werten zum Zählen. Die Werte 1-9 entsprenden den Indizes 0-8. Funktion wird ein "Dreizeiler".
-
Danke, ich wusste nicht, dass folgender Ausdruck erlaubt ist
DirkB schrieb:
In der Schleife kannst du dann zählen.
a[arr[i][j]-1]++;
aber warum das -1?
-
Danke, ich wusste nicht, dass folgender Ausdruck erlaubt ist
Warum sollte das nicht erlaubt sein?
aber warum das -1?
Du hast Zahlen von 1-9, das Array (bzw. der Index(?)) geht aber von 0 bis 8.
-
DirkB schrieb:
vorher solltest du prüfen, ob arr[i][j] im richtigen bereich ist.
Damit ist 1 bis 9 gemeint.
Sonst sprichst du den falschen Index im Array an.
Und das kommt nicht gut.
-
wizZarD schrieb:
aber warum das -1?
Damit 1-9 auf 0-8 abgebildet werden.
-
int p(int arr[3][3]) { int i, j, x = 0; for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) x |= 1 << arr[i][j]; return (x == 0x03FE ? 1 : -1); } int main() { int arr[3][3] = { {1, 6, 4}, {2, 3, 8}, {9, 5, 7} }; printf("%i\n", p(arr)); arr[0][0] = 9; printf("%i\n", p(arr)); }
-
Schreib doch erstmal was du genau verbessern willst, wie die Aufgabenstellung lautet.
Was soll hier jetzt hier jemand sagen, wenn du einfach nur den Code hinklatschst
-
vayacontoz schrieb:
Schreib doch erstmal was du genau verbessern willst, wie die Aufgabenstellung lautet.
Was soll hier jetzt hier jemand sagen, wenn du einfach nur den Code hinklatschstSiehe Seite 1
Wunderte mich aber auch erst drüber.
-
vayacontoz schrieb:
Schreib doch erstmal wie die Aufgabenstellung lautet.
Auch wenn er es nicht explizit sagt möchte er wohl ein Sudoku Feld überprüfen.
-
sry. mein Fehler, hab nur die zweite Seite gesehen