0
void generateSudoku(int sudoku[][C])
{
for (int i = 0; i < R; i++)
{
for (int j = 0; j < C; j++)
{
sudoku[i][j] = generateRandNum(); //generate random number for all 2d array
while (sudoku[1][0] == sudoku[0][0] || sudoku[2][0] == sudoku[1][0] || sudoku[2][0] == sudoku[0][0]
|| sudoku[3][0] == sudoku[2][0] || sudoku[3][0] == sudoku[1][0] || sudoku[3][0] == sudoku[0][0])
sudoku[i][j] = generateRandNum();
while ( sudoku[i][1] == sudoku[i][0] || sudoku[1][1] == sudoku[0][1] || sudoku[2][1] == sudoku[1][1]
|| sudoku[2][1] == sudoku[0][1] || sudoku[3][1] == sudoku[2][1] || sudoku[3][1] == sudoku[1][1]
|| sudoku[3][1] == sudoku[0][1]) //index 1 to index 0
sudoku[i][j] = generateRandNum();
while ((sudoku[i][2] == sudoku[i][0]) || (sudoku[i][2] == sudoku[i][1]) || sudoku[1][2] == sudoku[0][2]
|| sudoku[2][2] == sudoku[1][2] || sudoku[2][2] == sudoku[0][2] || sudoku[3][2] == sudoku[2][2]
|| sudoku[3][2] == sudoku[1][2] || sudoku[3][2] == sudoku[0][2])
sudoku[i][j] = generateRandNum();
while ((sudoku[i][3] == sudoku[i][0]) || (sudoku[i][3] == sudoku[i][1]) || (sudoku[i][3] == sudoku[i][2])) //index 3 to index 2,1,0
sudoku[i][j] = generateRandNum();
}
}
}
2次元配列を乱数で生成する方が、より効率的で簡単な方法があります。これは、各列と行ごとに独特のものですか?コードは機能しますが、実行時間が長すぎます。おそらくは非常に多くのループが原因です。また、私は初心者です(初年度のcs学生)ので、私は複雑なアルゴリズムを行う方法がわからないので、私はそれを明確にするために考えることができる唯一の方法です(ええと私はその愚かで非効率的で間違っていることを知っています)。行と列の間に異なる番号を持つ2次元配列を生成するにはどうすればよいですか?
EDIT:generateRandNum:
int generateRandNum()
{
int randNum;
randNum = (rand() % 4)+1;
return randNum;
}
generateRandNumの本文を投稿できますか? – Angen
メインポスト –
に投稿されたgenRandNumのループは時間の無駄ですが、なぜあなたはそれを持っていますか?この関数は1つの数値だけを返し、すべてを返しません20 – Angen