C++ 如何生成一个介于1和k之间的随机数,该随机数在c++;?
若n=2,m=3,k=5,那个么答案可能是1或4或5。给定的k总是大于或等于3。如果k=3,n=1,m=3,那么答案将是2。假设m≠n、 有四种情况需要考虑:C++ 如何生成一个介于1和k之间的随机数,该随机数在c++;?,c++,math,random,numbers,C++,Math,Random,Numbers,若n=2,m=3,k=5,那个么答案可能是1或4或5。给定的k总是大于或等于3。如果k=3,n=1,m=3,那么答案将是2。假设m≠n、 有四种情况需要考虑: (mk)和(nk): 只需返回一个从1到k的随机数 (一)≤ M≤ k) 和(nk): 生成一个从1到k–1的随机数。如果它等于m,则改为输出k (mk)和(1≤ N≤ k) : 生成一个从1到k–1的随机数。如果它等于n,则改为输出k (一)≤ M≤ k) 及(1)≤ N≤ k) : 生成一个从1到k–2的随机数。如果它等于m,则
如果m=n,您可以将其中一个设置为零。不考虑长距离的消耗时间,这可以算作一个答案(但不是优化的答案)
如果不考虑长距离的消耗时间,这可以算作一个答案(但不是最佳答案) <>在C++(+)中创建一个随机数的PSUDO集合。因此,我建议使用srand(…)设置种子值。另一个解决方案是:
int main()
{
// Generetes random seed for psudo random numbers.
srand (1234);
// Initialze variables
int n, m, k, random;
// Read in values
std::cout << "Enter n: ";
cin >> n;
std::cout << "Enter m: ";
cin >> m;
std::cout << "Enter k: ";
cin >> k;
// Generates a random number
do {
random = rand()% k + 1; // Random number from 1 to k
}
// Repeat if the random number is equal to n or m
while (random == n || random == m);
// The value
cout<<"Number generated: " <<random<<"\n";
return 0;
}
intmain()
{
//psudo随机数的Generetes随机种子。
srand(1234);
//初始化变量
int n,m,k,随机;
//读入值
std::cout>n;
std::cout>m;
std::cout>k;
//生成一个随机数
做{
random=rand()%k+1;//从1到k的随机数
}
//如果随机数等于n或m,则重复此操作
而(random==n | | random==m);
//价值
C++中的CUT< P>创建了一个随机数的PSUDO集合。因此,我建议用SRAND(…)设置种子值。
int main()
{
// Generetes random seed for psudo random numbers.
srand (1234);
// Initialze variables
int n, m, k, random;
// Read in values
std::cout << "Enter n: ";
cin >> n;
std::cout << "Enter m: ";
cin >> m;
std::cout << "Enter k: ";
cin >> k;
// Generates a random number
do {
random = rand()% k + 1; // Random number from 1 to k
}
// Repeat if the random number is equal to n or m
while (random == n || random == m);
// The value
cout<<"Number generated: " <<random<<"\n";
return 0;
}
intmain()
{
//psudo随机数的Generetes随机种子。
srand(1234);
//初始化变量
int n,m,k,随机;
//读入值
std::cout>n;
std::cout>m;
std::cout>k;
//生成一个随机数
做{
random=rand()%k+1;//从1到k的随机数
}
//如果随机数等于n或m,则重复此操作
而(random==n | | random==m);
//价值
cout有很多方法可以做到这一点,选择取决于底层需求是什么
// brute force (assumes that n < m):
int res = rand() % (k - 2) + 1;
if (n <= res) ++res;
if (m <= res) ++res;
// elimination:
int res = rand() % k + 1;
while (res == n || res == m)
res = rand() % k;
// table lookup:
int results[] = { 1, 2, 3, 5, 6, 8 }; // n == 4, m == 7
int res = rand() % (sizeof results / sizeof *results);
res = results[res];
//暴力(假设n if(n有很多方法可以做到这一点,选择取决于底层需求是什么
// brute force (assumes that n < m):
int res = rand() % (k - 2) + 1;
if (n <= res) ++res;
if (m <= res) ++res;
// elimination:
int res = rand() % k + 1;
while (res == n || res == m)
res = rand() % k;
// table lookup:
int results[] = { 1, 2, 3, 5, 6, 8 }; // n == 4, m == 7
int res = rand() % (sizeof results / sizeof *results);
res = results[res];
//暴力(假设n 如果(n生成介于1和k-2之间的数字,然后在n之后加1,如果在n和2之后是在m之后,则加1,这样做有助于您:生成介于1和k-2之间的数字,然后在n和2之后是在m之后加1,这样做有助于您:重要的部分是do while循环。前面的代码是just设置。重要的部分是do while循环。前面的代码就是设置。