2017-02-22 3 views
0

Ich habe gerade angefangen, mein Sudoku-Spiel zu machen, und ich habe diese Funktion grid zum Erstellen eines 6x6 Sudoku-Grid gemacht. Ich habe die rand() Funktion für verschiedene Zahlen in jeder Zelle benutzt (zZ prüft es nur Zeilen für Wiederholung von Zahlen). rand() wird auch für Zufallszahlen von leeren Zellen in jedem Raster verwendet.Sudoku Grid Generator

Das Problem ist, dass manchmal das Gitter ist perfekt 6x6 und ohne Wiederholung einer Zahl (nur in Zeilen), aber manchmal in einigen Zellen sind Müll-Werte generiert und manchmal die Anzahl der Spalten erhöht. Ich verstehe nicht, was das Problem verursacht.

Der Code:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
void grid(void) { 
    int cell[6][6], row, col, s, i, j; 
    char in = 'A'; 
    srand(time(NULL)); 
    for (row = 0; row <= 5; row++) { 
     printf("\t\t\t[ |"); 
     for (col = 0; col <= 5; col++) { 
      s = rand() % 6 + 1; 
      if (s % 2 == 0) 
      { 
       cell[row][col] = rand() % 6 + 1; 
       for (j = 0; j<col; j++) { 
        if (cell[row][j] == cell[row][col]) { 
         col--; 
         continue; 
        } 
       } 
      } 
      else { printf(" | ", in++); continue; } 
      printf(" %d | ", cell[row][col]); 
     } 
     printf("]\n\n"); 
    } 
} 

int main() 
{ 
    grid(); 
} 
+0

Die Pico-Einrückung, die Sie verwenden, kann für Pico in Ordnung sein, aber C ist nicht Pico. Bitte verwenden Sie einen orthodoxen C [Einrückungsstil] (https://en.wikipedia.org/wiki/Indent_style) - Ich bevorzuge Allman, aber viele Leute bevorzugen eine Variante von 1TBS. Bleiben Sie bei dem einen oder anderen und Sie werden nicht viel falsch machen. –

+0

In einer 6x6 Sudoku-Karte haben Sie normalerweise 6 Unterzellen mit 2 Reihen und 3 Spalten, und Sie müssen die Eindeutigkeit der 6 Zahlen in jeder Unterzelle sowie in jeder Zeile und jeder Spalte beibehalten. Dein Code scheint nicht genug zu tun, um diese Kriterien zu erfüllen. In einer 9x9-Karte hätten Sie 9 Subzellen mit einer Größe von 3x3, wobei die Zahlen in jeder Unterzelle sowie in jeder Zeile und Spalte eindeutig sind. Ich frage mich, ob du es besser machen würdest, wenn du zufällig eine Reihe von 6 Gegenständen permutierst? (Ich habe keinen Sudoku-Generator programmiert; ich weiß nicht, wie es am besten geht. Aber es gibt fast 700 Fragen zu SO-Tags [tag: sudoku]!) –

Antwort

0

Sie sind zu viele Syntaxfehler in dem Code, den Sie schreiben, und das Format ist ziemlich schrecklich. Versuchen Sie es zu bearbeiten, damit wir Ihnen helfen können!

col--; Vielleicht ist dies Ihr Problem, denn wenn Sie col--; in Ihrer for (col = 0; col < 6; col++) Schleife, werden Sie mehr als 6 Iterationen tun.

+0

Willkommen bei Stack Overflow. Ich stimme zu, dass der Code in der Frage nicht wie geschrieben gelesen werden kann. Sie sollten jedoch besser warten, bis Sie genug Reputation (50 Punkte) zum Kommentieren haben, als einen Kommentar als "Antwort" hinzuzufügen. Das 'col -' ist kein großes Problem; Es ist eine Möglichkeit, zurückzugehen und einen weiteren Versuch zu unternehmen, eine Nummer zu generieren, wenn die gewählte Nummer bereits verwendet wird. Der Code ist möglicherweise nicht richtig im Algorithmus, aber das 'col -' ist selbst kein Problem. –

+0

Wie kann ich 50 Ruf bekommen, ohne zu antworten? (ehrliche Frage nicht Sarkasmus) und Entschuldigung wegen der falschen Antwort:/ – Dot31

+0

Es gibt 3 Hauptwege, zum des Rufs zu gewinnen: (1) das Stellen guter Fragen; (2) gute Antworten geben; (3) Bearbeiten von Fragen oder Antworten, die als gut angesehen werden. Sie sollten eine Frage finden, die Sie kennen oder die Antwort erarbeiten können - vielleicht eine, die für eine Stunde oder länger vernachlässigt wurde, so dass Sie nicht mit der FGITW-Menge (schnellste Waffe im Westen) in Konkurrenz stehen - und dafür sorgen eine gute Antwort darauf. In der Regel werden Sie dadurch einen guten Ruf bekommen. –