2017-02-22 4 views
0

방금 ​​스도쿠 게임을 만들기 시작했고이 기능을 6x6 스도쿠 그리드 용으로 만들었습니다. 나는 각 셀의 다른 숫자에 대해 rand() 함수를 사용했다. (현재는 숫자의 반복 행만 검사한다.) rand()은 각 격자에서 빈 셀의 난수에도 사용됩니다.스도쿠 격자 생성기

문제는 그리드가 완벽한 6x6이고 임의의 숫자가 반복되지 않고 (행에서만), 일부 셀에서 때때로 가비지 값이 생성되고 때로는 컬럼 수가 증가한다는 점입니다. 문제의 원인을 이해하지 못합니까?

강령 :

#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

사용중인 Pico 들여 쓰기 스타일이 Pico에서는 좋지만 C는 Pico가 아닙니다. 정통 C [들여 쓰기 스타일] (https://en.wikipedia.org/wiki/Indent_style)을 사용하십시오. Allman을 선호하지만 많은 사람들이 1TBS의 변형을 선호합니다. 그것들 중 하나 또는 다른 것을 고수하면 잘못되지 않을 것입니다. –

+0

6x6 스도쿠 보드에는 일반적으로 2 행 3 열의 하위 셀이 6 개 있으며 각 행과 각 열뿐만 아니라 각 하위 셀의 6 자리 수의 고유성을 보존해야합니다. 코드가 이러한 기준에 부합하지 않을 것입니다. 9x9 보드에는 각 서브 셀과 각 행과 열의 고유 번호가있는 3x3 크기의 서브 셀이 9 개 있습니다. 6 개 항목의 배열을 무작위로 바꾸는 것이 더 나을지 궁금합니다. (나는 스도쿠 생성기를 코딩하지 않았으므로 가장 좋은 방법은 모른다.하지만 태그 된 스도쿠에 관한 700 개의 질문이있다. –

답변

0

그들은 당신이 게시 코드에 너무 많은 구문 오류이며, 형식은 매우 끔찍하다. 우리가 당신을 도울 수 있도록 편집 해보십시오!

col--; 아마도 이 for (col = 0; col < 6; col++) 루프에 있으면 6 회 이상 반복 할 수 있기 때문에 문제가 될 수 있습니다.

+0

Welcome to Stack Overflow. 질문에있는 코드가 서면으로 읽을 수 없다는 것에 동의합니다. 그러나 '답안'으로 의견을 추가하는 것보다 평판이 좋을 때까지 기다리는 것이 더 나을 것입니다 (50 점). 'col -'는 큰 문제는 아니다; 선택한 번호가 이미 사용 중일 때 돌아가서 다른 번호를 생성하려고 시도하는 방법입니다. 코드가 알고리즘에 맞지 않을 수도 있지만 'col -'자체는 자동으로 문제가되지 않습니다. –

+0

응답없이 명성을 얻으려면 어떻게해야합니까? (정직한 질문은 풍자가 아닙니다.) 그리고 잘못된 대답에 대해 미안합니다 :/ – Dot31

+0

명성을 얻으려면 3 가지 주요 방법이 있습니다 : (1) 좋은 질문을합니다; (2) 좋은 대답을 준다; (3) 좋은 것으로 여겨지는 질문이나 답변을 편집하는 것. 답을 알아 내거나 해결할 수있는 질문을 찾아야합니다. 아마도 한 시간 이상 소홀히되어서 서쪽에서 가장 빠른 총 인 FGITW와 경쟁 할 수 없을 것입니다. 좋은 대답이에요. 보통, 그것은 당신에게 약간의 평판을 얻을 것입니다. –