[英]Proper use of rand()?
因此,此方法的想法是,它接收main中的9x9数组,并在行之间交换。 它只能将1-3行与1-3交换,将4-6与4-6交换,将7-9与7-9交换。 由于某种原因,它会不时地将4-6中的一个与7-9中的一个交换,有时还会给我7-9行之一的绝对垃圾。 我花了2个小时的大部分时间来弄清楚在这种情况下使用rand()的正确方法,并且我确定我没有正确地做到这一点。 有任何想法吗?
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
void printSudoku(int square[9][9]) // Prints out the 9x9 array
{
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 9; j++)
{
cout << square[i][j];
}
cout << endl;
}
}
void swapRows(int square[9][9]) // Randomly generates numbers, within bounds, and swaps those rows with each other
{
int temp[1][9];
srand(time(NULL));
int n = (rand() % 2) + 0;
int m = (rand() % 2) + 0;
for(int i = 0; i < 9; i++)
{
temp[0][i] = square[n][i];
}
for(int j = 0; j < 9; j++)
{
square[n][j] = square[m][j];
}
for(int k = 0; k < 9; k++)
{
square[m][k] = temp[0][k];
}
int a = (rand() % 5) + 3;
int b = (rand() % 5) + 3;
for(int i = 0; i < 9; i++)
{
temp[0][i] = square[a][i];
}
for(int j = 0; j < 9; j++)
{
square[a][j] = square[b][j];
}
for(int k = 0; k < 9; k++)
{
square[b][k] = temp[0][k];
}
int c = (rand() % 8) + 6;
int d = (rand() % 8) + 6;
for(int i = 0; i < 9; i++)
{
temp[0][i] = square[c][i];
}
for(int j = 0; j < 9; j++)
{
square[c][j] = square[d][j];
}
for(int k = 0; k < 9; k++)
{
square[d][k] = temp[0][k];
}
}
int main() {
int square[9][9] = {1,2,3,4,5,6,7,8,9,
4,5,6,7,8,9,1,2,3,
7,8,9,1,2,3,4,5,6,
2,3,4,5,6,7,8,9,1,
5,6,7,8,9,1,2,3,4,
8,9,1,2,3,4,5,6,7,
3,4,5,6,7,8,9,1,2,
6,7,8,9,1,2,3,4,5,
9,1,2,3,4,5,6,7,8,};
printSudoku(square);
swapRows(square);
cout << endl;
printSudoku(square);
return 0;
}
调用rand()
,它将为您提供0到RAND_MAX
之间的数字。 当您使用诸如rand() % 8
,它会为您提供0到7之间的一个随机数。这比您希望随机数跨度更大。 您只希望随机数为0到2(0、1或2),然后为第一行添加偏移量。
例如, (rand() % 8) + 6
为您提供一个从0 + 6 = 6到7 + 6 = 13的随机数。 而是使用(rand() % 3) + 6
给您0 + 6 = 6到2 + 6 = 8。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.