【发布时间】:2021-03-17 20:52:46
【问题描述】:
#include <iostream>
#include<ctime>
#include<cstdlib>
#include<string>
#include<cmath>
using namespace std;
int main()
{
bool cont = false;
string str;
int num, num2;
cin >> str >> num;
int arr[10];
int a = pow(10, num);
int b = pow(10, (num - 1));
srand(static_cast<int>(time(NULL)));
do {
num2 = rand() % (a - b) + b;
int r;
int i = 0;
int cpy = num2;
while (cpy != 0) {
r = cpy % 10;
arr[i] = r;
i++;
cpy = cpy / 10;
}
for (int m = 0; m < num; m++)
{
for (int j = 0; j < m; j++) {
if (m != j) {
if (arr[m] == arr[j]) {
break;
}
else {
cont = true;
}
}
}
}
cout << num2 << endl;
} while (!cont);
return 0;
}
我想从用户那里获取一个数字并产生这样一个随机数。
比如用户输入8,一个8位的随机数。这个数字必须是唯一的,所以每个数字必须互不相同,例如:
用户输入 5
随机数=11225(无效所以取新数)
随机数=12345(有效所以输出)
为此,我将数字分成数位并将其放入数组中并检查它是否唯一。程序从用户那里获取随机数并将它们扔到数组中。直到这一部分为止一切正常。但是我使用 for 循环检查这个数字是否唯一的函数不起作用。
【问题讨论】:
-
45678 是
5的有效号码还是需要包含数字[1, entered_number]? -
请更具体。 “但我得到一个错误”不是一个很好的描述。
-
宁可使用 c++ 标准库中的Pseudo-random number generation。 IIRC 已经实现了生成唯一集和随机数范围的算法。
-
有效,因为每个数字都不一样。
-
这听起来像是针对唯一序列 0-9、随机洗牌和计数器的工作(如果前导数字为 0 则碰撞,因此被跳过)。