对于编程分配我需要生成多组10个数字的,范围为1〜50,在每个单独的组没有重复的部分,所以我创建以下代码:生成在C++鲜明随机数
int Numbers[10]; //array to store the random numbers in
bool Duplicate; //variable to check or number is already used
srand(time(NULL)); //seeding the random number generator
// do while loop used to allow user to generate multiple sets
do {
Duplicate = false; // set check to false
//for loop to generate a complete set of 10 random numbers
for (int I = 0; I < 10; I++)
{
// do while loop used to generate random numbers until a distinct random number is generated
do
{
Numbers[I] = (rand()%50) + 1; // generates a random number 1 - 50 and stores it into Numbers[I]
// for loop used to check the other numbers in set for any repeats
for (int J = I - 1; J > -1; J--) // works backwards from the recently generated element to element 0
if (Numbers[I] == Numbers[J]) //checks if number is already used
Duplicate = true; //sets Duplicate to true to indicate there is a repeat
} while (Duplicate); //loops until a new, distinct number is generated
}
//at this point in the program we should have an array Numbers[] with a set of 10 unique random numbers 1 - 50
// loop to print numbers to the screen
for (int I = 0; I < 10; I++)
cout << Numbers[I] << " "; // printing the element to the screen
cout << endl;
cout << "Do you want to run the program again (Y/N): "; // Asks user if they want to create another set of 10 numbers
char Answer; // used to store users answer
cin >> Answer; // stores users answer
} while (Answer == 'Y' || Answer == 'y'); // loop program if the user wants to generate another set
但是,我似乎遇到了产生随机数的do while循环的问题,直到产生一个新的不同的数字。 经过一些测试和修补后,我发现我不知何故在那里创建了一个无限循环,无法找出问题。
我认为可能导致问题的一些想法: rand函数如何改变种子,并且正在改变种子以创建新的伪随机数? - 我的循环检查重复超出数组边界?
任何意见和提示将不胜感激。
我认为你不允许使用('unordered_')'set'? – chris
为什么不从1 - 50填充一个数组并将其洗牌10次? – yizzlez
因此,在您的do-while循环中,您在给定条件下将Duplicate设置为true,但永远不会设置为false。也没有断言。这将创建一个无限循环!你必须有条件离开循环。 – Graeme