2017-02-22 13 views
0

私は数独ゲームを始めたばかりで、数独グリッドを作成するにはこの機能をgridにしました。私は各セルの異なる番号に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

使用しているピコのインデントスタイルはピコの場合は問題ありませんが、Cはピコではありません。正統派のC [インデントスタイル](https://en.wikipedia.org/wiki/Indent_style)を使用してください - 私はオールマンが好きですが、多くの人は1TBSのいくつかの変種を好んでいます。それらのいずれかまたは他のものに固執すれば、間違ったことは起こりません。 –

+0

6x6数独ボードでは、通常、2行3列の6つのサブセルがあり、各行と各列に加えて、各サブセルの6つの数字の一意性を保つ必要があります。あなたのコードは、これらの基準に合致するのに十分ではないようです。 9x9ボードでは、それぞれのサブセルだけでなく各行と列に固有の番号を持つ、3x3のサイズの9つのサブセルがあります。私はあなたが6項目の配列をランダムに並べ替えることでうまくいくかどうか疑問に思いますか? (私は数独ジェネレーターをコード化していません;それを行う最良の方法はわかりませんが、SOタグ付きの[tag:sudoku]には約700の質問があります) –

答えて

0

彼らはあなたが投稿したコードでは、あまりにも多くの構文エラーであり、フォーマットは非常に恐ろしいです。私たちがあなたを助けることができるように編集してみてください!

col--; これはあなたの問題です。もしあなたのfor (col = 0; col < 6; col++)ループにcol--;のループがあれば、6回以上繰り返します。

+0

ようこそスタックオーバーフローへようこそ。私は質問のコードが書かれているように読めるわけではないことに同意します。しかし、「回答」としてコメントを追加するよりも、評判が十分にある(50ポイント)までコメントするまで待つ方がよいでしょう。 'col - 'は大きな問題ではありません。これは、選択された番号がすでに使用されているときに、戻って別の番号を生成しようとする方法です。コードはアルゴリズムでは正しくないかもしれませんが、 'col - '自体は自動的に問題にはなりません。 –

+0

どのように応答せずに50の評判を得ることができますか? (正直な質問は皮肉ではない)と間違った答えを残念に思う:/ – Dot31

+0

評判を得るために3つの主要な道がある:(1)良い質問をする。 (2)良い答えを与える。 (3)良いと思われる質問または回答を編集すること。あなたは、あなたが知っているか、答えを解明することができる質問を見つけるべきです - おそらく1時間以上無視されているので、あなたはFGITW(西で最速の銃)の群衆と競争しないでしょう - そして、それに対する良い答え。通常、それはあなたにいくつかの評判を得るでしょう。 –