| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: Sudoku Cheat-Prog. im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Zitat: Original von Elderan ermutlich eh nicht verstehen wirst und es leichter ist ein Programm/Algorithmus nachzuvollziehen. trotzdem vielen dank fuer ...
![]() |
| | #31 (permalink) | |
| Registriert seit: 19.01.07 ![]() Likes: 2 | Zitat:
ich brauchs fuer nen mathelehrer... | |
| | |
| | #32 (permalink) | ||
| Moderator ![]() Registriert seit: 30.03.04 ![]() Likes: 14 | Hallo, Zitat:
Ein simples Beispiel ist, wie man Orangen möglichst platzsparend stapeld: Orangenstapel Zu beweisen, dass man eine Pyramide bilden muss, dazu benötigt man hunderte von Seiten an höchster Mathematik. Ebenso simple Sachen wie zu beweisen, dass der Kreis einen eindeutigen Flächeninhalt hat bzw, dass dieser überhaupt einen Flächeninhalt hat [1] ist höchst ansprechend, so dass kaum ein Schüler überhaupt das Problem versteht. Das fängt an beim Begriff der Sigma-Algebra geht über Borel Algebra, Maßräume, Lesbegue Maß, Maßfortsetzung etc., oder kurz: Maßtheorie Und nun möchtest du mir erzählen, dass du in der Lage bist, mathematische Formeln/Sätze/Definitionen zu verstehen? Mathematik ist viel mehr als nur die Formel A = \pi * r^2. Ein ganz simple 'Formel' zur Beschreibung wie sich Jäger und Beute in einem geschlossenen Ökosystem verhält wäre: y(t) := Anzahl der Jäger zum Zeitpunkt t z(t) := Anzahl der Beute zum Zeitpunkt t y'(t) = a*y(t) + b(z(t)-c) z'(t) = d*z(t) + e*y(t) a := Geburtenrate Jäger > 0 b, c := Schwellenwerte, > 0 d := Geburtenrate Beute > 0 e := Fressrate < 0 Wenn nun a,b,c,d,e gegeben ist, dann lässt sich eine explizite Formel für y und z finden, so dass man sagen kann, nach t Zeiteinheiten gibt es ... Jäger und ... Beutetiere. Es ist also keine Formel für y oder z(t) vorgegeben, sondern die lässt sich dann so bestimmen. [1] es gibt auch Flächen/Mengen in den reellen Zahlen (R^2), die keinen Flächeninhalt haben, also weder die Fläche 0 noch irgendein einen anderen Flächeninhalt. Nennen sich Vitali-Mengen) | ||
| | |
| | #33 (permalink) |
| Registriert seit: 11.10.09 ![]() Likes: 0 | hab das auch mal gecodet in VB.NET. Ich hab jetzt einfach mal ein SudokuFeld (als Array) initialisiert das komplett leer ist. Das Programm braucht 0.0156250 Sekunden um es aufzulösen (also ca. 16 Millisekunden wenn ich das richtig seh?) Hier der Lösungsalgorithmus: Code: Private field(9, 9) As Integer
Private line As Integer = 0
Public Function solve() As Boolean
For x As Integer = line To 8
For y As Integer = 0 To 8
'Wenn das aktuelle Feld nicht besetzt ist
If field(x, y) = 0 Then
For val As Integer = 1 To 9
'Setze Zahl
field(x, y) = val
'Wenn Zahl gültig ist
If fieldValid() Then
line = x
'rekursiver Aufruf
If solve() Then
'wenn gesetzte Zahl richtig war -> beende Schleife
'wenn nicht -> setze Schleife fort = setze nächste Zahl in Feld
Exit For
End If
'Wenn die Zahl nicht gültig ist
Else
'Wenn die Zahl im aktuellen Feld 9 ist -> setze Feld zurück
'und return false
If val = 9 Then
field(x, y) = 0
Return False
End If
End If
Next
End If
Next
Next
Return True
End Function Code: Private Function fieldValid() As Boolean
Dim numbers1to9(9) As Integer
numbers1to9(1) = 0
numbers1to9(2) = 0
numbers1to9(3) = 0
numbers1to9(4) = 0
numbers1to9(5) = 0
numbers1to9(6) = 0
numbers1to9(7) = 0
numbers1to9(8) = 0
numbers1to9(9) = 0
Dim i As Integer
Dim j As Integer
'---------Überprüfung aller 3x3 Kasten------------------
For i = 0 To 6 Step 3 'x
For j = 0 To 6 Step 3 'y
For k As Integer = j To j + 2 Step 1 'y
For l As Integer = i To i + 2 Step 1 'x
'Wenn das aktuelle Feld 1-9 als Inhalt hat -> Erhöhund des entsprechenden Zählers
If field(k, l) = 1 Or field(k, l) = 2 Or field(k, l) = 3 _
Or field(k, l) = 4 Or field(k, l) = 5 Or field(k, l) = 6 _
Or field(k, l) = 7 Or field(k, l) = 8 Or field(k, l) = 9 Then
numbers1to9(field(k, l)) += 1
End If
Next
Next
'Wenn eine Zahl öfters als ein mal vor kommt -> ungültig
If numbers1to9(1) > 1 OrElse numbers1to9(2) > 1 OrElse numbers1to9(3) > 1 _
OrElse numbers1to9(4) > 1 OrElse numbers1to9(5) > 1 OrElse numbers1to9(6) > 1 _
OrElse numbers1to9(7) > 1 OrElse numbers1to9(8) > 1 OrElse numbers1to9(9) > 1 Then
Return False
End If
numbers1to9(1) = 0
numbers1to9(2) = 0
numbers1to9(3) = 0
numbers1to9(4) = 0
numbers1to9(5) = 0
numbers1to9(6) = 0
numbers1to9(7) = 0
numbers1to9(8) = 0
numbers1to9(9) = 0
Next
Next
'-------------------------------------------------------------------
'---------Überprüfung aller Reihen nacht unten----------------------
For i = 0 To 8
For j = 0 To 8
'Wenn das aktuelle Feld 1-9 als Inhalt hat -> Erhöhund des entsprechenden Zählers
If field(i, j) = 1 Or field(i, j) = 2 Or field(i, j) = 3 _
Or field(i, j) = 4 Or field(i, j) = 5 Or field(i, j) = 6 _
Or field(i, j) = 7 Or field(i, j) = 8 Or field(i, j) = 9 Then
numbers1to9(field(i, j)) += 1
End If
Next
'Wenn eine Zahl öfters als ein mal vor kommt -> ungültig
If numbers1to9(1) > 1 OrElse numbers1to9(2) > 1 OrElse numbers1to9(3) > 1 _
OrElse numbers1to9(4) > 1 OrElse numbers1to9(5) > 1 OrElse numbers1to9(6) > 1 _
OrElse numbers1to9(7) > 1 OrElse numbers1to9(8) > 1 OrElse numbers1to9(9) > 1 Then
Return False
End If
numbers1to9(1) = 0
numbers1to9(2) = 0
numbers1to9(3) = 0
numbers1to9(4) = 0
numbers1to9(5) = 0
numbers1to9(6) = 0
numbers1to9(7) = 0
numbers1to9(8) = 0
numbers1to9(9) = 0
Next
'----------------------------------------------------------------------
'----------- Überprüfung aller Reihen nach Rechts----------------------
For i = 0 To 8
For j = 0 To 8
'Wenn das aktuelle Feld 1-9 als Inhalt hat -> Erhöhund des entsprechenden Zählers
If field(j, i) = 1 Or field(j, i) = 2 Or field(j, i) = 3 _
Or field(j, i) = 4 Or field(j, i) = 5 Or field(j, i) = 6 _
Or field(j, i) = 7 Or field(j, i) = 8 Or field(j, i) = 9 Then
numbers1to9(field(j, i)) += 1
End If
Next
'Wenn eine Zahl öfters als ein mal vor kommt -> ungültig
If numbers1to9(1) > 1 OrElse numbers1to9(2) > 1 OrElse numbers1to9(3) > 1 _
OrElse numbers1to9(4) > 1 OrElse numbers1to9(5) > 1 OrElse numbers1to9(6) > 1 _
OrElse numbers1to9(7) > 1 OrElse numbers1to9(8) > 1 OrElse numbers1to9(9) > 1 Then
Return False
End If
numbers1to9(1) = 0
numbers1to9(2) = 0
numbers1to9(3) = 0
numbers1to9(4) = 0
numbers1to9(5) = 0
numbers1to9(6) = 0
numbers1to9(7) = 0
numbers1to9(8) = 0
numbers1to9(9) = 0
Next
'----------------------------------------------------------------------
Return True
End Function Ich hab das ganze auch mal gecodet mit Algorithmen die das Sudoku durch Logik lösen (und Trial&Error falls mit Logik nichts mehr geht). Der Code ist allerdings wesentlich länger. Aber falls jemand Interesse hat kann ich den ja auch mal posten. P.S.: Wie kann man hier Hide machen? Find des ned |
| | |
| | #34 (permalink) |
| Registriert seit: 27.07.09 ![]() Likes: 0 | Bruteforce, C++, unspektakulär Code: #include <iostream>
const int K = 3; //Kasten
const int D = K*K; //Seitenlaenge
short feld[D][D];
inline bool test(int x, int y)
{
for(int i = 0; i< D; i++)
{
if( ((feld[x][y] == feld[i][y]) && (x!=i)) || ((feld[x][y] == feld[x][i]) && (y!=i)) ) return false;
}
for(int ix = (x/K) *K; ix < (x/K+1)*K; ix++)
for(int iy = (y/K) *K; iy < (y/K+1)*K; iy++)
if(ix != x && iy != y && feld[x][y] == feld[ix][iy]) return false;
}
bool fill(int x, int y)
{
if(y == D)
return true;
if(feld[x][y] == 0)
{
for(int i = 1; i < D+1; i++)
{
feld[x][y] = i;
if(test(x,y))
if(fill((x+1)%D, y+(x+1)/D)) return true;
}
feld[x][y] = 0;
return false;
}
else
return test(x,y) ? fill((x+1)%D, y+(x+1)/D) : false;
}
void main()
{
std::cout << "\n \n Zahl fuer Zahl (Zeilenweise; 0 = frei):\n";
for(int iy = 0; iy < D; iy++)
for(int ix = 0; ix < D; ix++)
std::cin >> feld[ix][iy];
if(fill(0,0))
for(int iy = 0; iy < D; iy++)
{
std::cout << "\n";
if(iy%K == 0) std::cout << "\n";
for(int ix = 0; ix < D; ix++)
{
if(ix%K == 0) std::cout << " ";
std::cout << feld[ix][iy] << " ";
}
}
else
std::cout << "Es sind Unstimmigkeiten in der Vorgabe.";
std::cout << "\n";
std::cin >> feld[0][0];
} |
| | |
![]() |
| | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Sudoku-Generator | CDW | Programmieraufgaben | 1 | 04.08.09 02:12 |
| Sudoku | Ook! | Code Kitchen | 2 | 25.05.08 11:00 |
| The Cheat Report | stone.dr | Fun Section | 17 | 20.03.06 15:18 |
| Sudoku programmieren | jami | Code Kitchen | 1 | 16.10.05 15:05 |