2017-02-22 631 views
0

我剛開始製作我的數獨遊戲,並且我創建了這個函數grid用於創建一個數獨網格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數獨板中,通常有6行2行3列的子單元,並且必須保留每個子單元中以及每行和每列中的6個數字的唯一性。您的代碼似乎沒有足夠符合這些標準。在9x9板中,您將擁有9個子單元,每個子單元的大小均爲3x3,每個子單元中以及每行和每列中的數字都是唯一的。我想知道你是否會隨機更換6件物品來做更好的事情? (我沒有編寫Sudoku生成器,我不知道最好的方法,但是SO標籤上有700個問題[標籤:sudoku]!) –

回答

0

他們在您發佈的代碼太多的語法錯誤,格式是相當可怕的。嘗試編輯它,以便我們可以幫助您!

col--; 也許這是你的問題,因爲如果你在你的for (col = 0; col < 6; col++)循環中你col--;,你會做6次以上的迭代。

+0

歡迎來到Stack Overflow。我同意問題中的代碼不可寫爲可讀。但是,您最好等到有足夠的聲望(50分)才能發表評論,而不是將評論添加爲「答案」。 'col - '不是一個主要問題;當選擇的號碼已被使用時,這是一種返回並再次嘗試生成號碼的方式。代碼在算法中可能不正確,但col - 本身不是問題。 –

+0

如何在沒有回覆的情況下獲得50點聲望? (誠​​實的問題不是諷刺),並對錯誤的答案感到抱歉:/ – Dot31

+0

有三個獲得聲譽的主要途徑:(1)提出很好的問題; (2)給出很好的答案; (3)編輯被認爲是好的問題或答案。你應該找到一個你知道或可以找出答案的問題 - 或許一個小時或更長時間被忽視的問題,所以你不會與FGITW(西部最快的槍支)人羣競爭 - 並提供這是一個很好的答案。通常情況下,這會爲你贏得一些聲譽。 –