gpt4 book ai didi

c++ - C++生成随机20个非重复数

转载 作者:行者123 更新时间:2023-12-01 14:15:50 25 4
gpt4 key购买 nike

所以我有一个程序,我生成一个 8x8 矩阵,它是房间。所以我们有 64 个房间。现在我必须随机生成 20 个脏房间。我想弄清楚如何生成 20 个不重复的数字以用作脏房间。到目前为止,这是我的代码:

//generate the 20 random dirty rooms 
int col;
int row;

for (int i = 0; i < 20; i++)
{
col = ranNumber();
row = ranNumber();
cout << "\t" << col << " " << row << endl;

if (room[row][col] == 'D')
{
cout << "Duplicate" << endl;
col = ranNumber();
row = ranNumber();
cout << "New number " << row << col << endl;
room[row][col] = 'D';

}
else

//set the room as dirty
room[row][col] = 'D';
}

*ranNumber():

int ranNumber() {
return rand() % 8;
}

最佳答案

由于您没有处理特别大的数据集,我建议使用 std::shuffle。您需要用 20 个脏房间初始化您的房间(位置无关紧要,所以做最简单的事情),然后让 std::shuffle 重新安排房间。这避免了您不得不编写自己的循环以防万一您的随机生成器运气不佳,并且可以更好地表达您的意图。

示例代码:

int main() {
char rooms[8][8];
for(auto i = 0; i < 8; ++i) {
for(auto j = 0; j < 8; ++j) {
rooms[i][j] = (i == 0) ? 'D' : ' ';
}
}
printRooms(rooms);
std::random_device rd{};
std::default_random_engine re{rd()};
auto b = (char *) rooms;
std::shuffle(b, b + (8 * 8), re);
std::cout << "----------------------\n";
printRooms(rooms);
return 0;
}

关于c++ - C++生成随机20个非重复数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62629068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com