C++ 在随机生成的数字中保证三位数字

C++ 在随机生成的数字中保证三位数字,c++,C++,我有一个作业,要求我们两次生成一个三位数,这样学生就可以把它们加在一起,然后检查他们的作业。我仍然非常,非常新的C++,我的课程遗憾地没有提供信息,甚至如何做到这一点。他没有提供视频、文章或任何关于随机生成数字的内容,也没有提供如何确保特定数字的安全,甚至没有提供如何将这些数字相加的内容 下面是我拼凑的代码,尽管它很粗糙。我不能保证三位数。有时,它将是一个两位数的数字。我已经给他发了电子邮件,看他能否给我指出一个正确的方向,但我并不乐观。我在想有什么办法可以设置一个最小值,但经过几个小时的搜索,

我有一个作业,要求我们两次生成一个三位数,这样学生就可以把它们加在一起,然后检查他们的作业。我仍然非常,非常新的C++,我的课程遗憾地没有提供信息,甚至如何做到这一点。他没有提供视频、文章或任何关于随机生成数字的内容,也没有提供如何确保特定数字的安全,甚至没有提供如何将这些数字相加的内容

下面是我拼凑的代码,尽管它很粗糙。我不能保证三位数。有时,它将是一个两位数的数字。我已经给他发了电子邮件,看他能否给我指出一个正确的方向,但我并不乐观。我在想有什么办法可以设置一个最小值,但经过几个小时的搜索,我找不到答案

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;  //This is so I do not have to type std::

int main(void)
{
    int set1; 
    int set2;
    int sum=0;
    srand((unsigned) time(NULL)); // sets the random seed to provide different number utilizing the time of the computer

    set1 = rand() % 999 + 1; //creates a randomly generated three digit number
    set2 = rand() % 999 + 1; //created a randomly generated three digit number


    cout << "\n\n\n Are you ready for some math practice?\n\n\n";
    cout.width(8); //sets width of the columns to align everything
    cout << set1 << "\n"; //prints first generated set
    cout << " +   ";

    cout << set2 << "\n"; //[rints second generated set
    cout << "---------\n";
    cout << "\n\n\n";
    sum = set1 + set2; //add the two generated sets together
    cout << "Try to solve the problem. Have you got it?\n";
    system("Pause"); //waits for student to press enter to continue
    cout << "\n\n\n";
    cout << "The answer is: "; 
    cout << sum; //displays sum of two numbers
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std//这样我就不必键入std::
内部主(空)
{
int set1;
int set2;
整数和=0;
srand((unsigned)time(NULL));//设置随机种子以利用计算机的时间提供不同的数字
set1=rand()%999+1;//创建一个随机生成的三位数
set2=rand()%999+1;//创建了一个随机生成的三位数
你差一点就到了

set1 = rand() % 999 + 1; //creates a randomly generated three digit number
这实际上会生成一个介于
1
999
之间的随机数。您需要的是生成一个介于
100
999
之间的数,最简单的方法是生成一个介于
0
899
之间的数,然后添加
100

set1 = rand() % 900 + 100; //creates a randomly generated three digit number
rand()
可以满足您的需要,但您可以使用

#包括
#包括
int main()
{
std::随机_装置rd;
标准:mt19937 gen(rd());
std::uniform_int_distribution dis(100999);//我们的分布在100到999之间
//打印100个随机数进行测试
对于(int i=0;i<100;++i)
std::cout你非常接近

set1 = rand() % 999 + 1; //creates a randomly generated three digit number
这实际上会生成一个介于
1
999
之间的随机数。您需要的是生成一个介于
100
999
之间的数,最简单的方法是生成一个介于
0
899
之间的数,然后添加
100

set1 = rand() % 900 + 100; //creates a randomly generated three digit number
rand()
可以满足您的需要,但您可以使用

#包括
#包括
int main()
{
std::随机_装置rd;
标准:mt19937 gen(rd());
std::uniform_int_distribution dis(100999);//我们的分布在100到999之间
//打印100个随机数进行测试
对于(int i=0;i<100;++i)
std::cout通常的C方法
这就是您正在使用的。您需要三条信息:

  • 最小值。对于您来说,它是100。(前三位数字。)
  • 最大值。对于您来说,它是999。(最后三位数字。)
  • 范围,即(最大值-最小值+1)。对于您来说,即(999-100+1)→ 900
要用C方法计算它,请计算除以范围的余数,然后加上最小值。即:

set1 = rand() % 900 + 100;
任何模900的数字都会得到一个0..899的值。加上100,你就会得到一个100..999的数字。瞧

正确的C方法 上述方法存在偏差(多亏了)。解决方法是简单地抽取随机数,直到在所需范围内得到一个:

int random_in_range( int minimum, int maximum )
{
  int result;
  do result = rand();
  while (result < minimum || maximum < result);
  return result;
}
唯一需要注意的是,非常小的范围(如0..3)可能会产生明显的滞后;您需要对此更为复杂一点(例如要求0..399中的数字并除以100)

C++方法 <>既然你使用C++,你不妨学习如何正确地处理它。
#include <chrono>
#include <random>

int random_in_range( int minimum, int maximum )
{
  thread_local std::ranlux48 rng( 
    std::chrono::system_clock::now().time_since_epoch().count() );
  return std::uniform_int_distribution <int> ( minimum, maximum )( rng );
}

...

set1 = random_in_range( 100, 999 );
#包括
#包括
随机整数在整数范围内(最小整数,最大整数)
{
螺纹_本地标准::ranlux48 rng(
std::chrono::system_clock::now().time_since_epoch().count());
返回标准:均匀分布(最小值、最大值)(rng);
}
...
set1=随机_在_范围内(100999);
这里我们使用一个静态(线程安全-如果只有一个线程,只需使用单词
static
而不是
thread\u local
)伪随机数生成器,并使用所需最小值和最大值给定范围内的均匀整数分布从中获取一个数字

它全部封装在一个方便的函数中,因此在使用它时与在C版本中看起来相同,但在以下方面更好:

  • 偏倚
  • 速度
  • 品质
在所有情况下。。。 您可以用同样的方法使用现有的代码:生成两个随机的三位数,让用户输入它们的和,并将他的答案与您的答案进行比较。

通常的C方法 这就是您正在使用的。您需要三条信息:

  • 最小值。对于您来说,它是100。(前三位数字。)
  • 最大值。对于您来说,它是999。(最后三位数字。)
  • 范围,即(最大值-最小值+1)。对于您来说,即(999-100+1)→ 900
要用C方法计算它,请计算除以范围的余数,然后加上最小值。即:

set1 = rand() % 900 + 100;
任何模900的数字都会得到一个0..899的值。加上100,你就会得到一个100..999的数字。瞧

正确的C方法 上述方法存在偏差(多亏了)。解决方法是简单地抽取随机数,直到在所需范围内得到一个:

int random_in_range( int minimum, int maximum )
{
  int result;
  do result = rand();
  while (result < minimum || maximum < result);
  return result;
}
唯一需要注意的是,非常小的范围(如0..3)可能会产生明显的滞后;您需要对此更为复杂一点(例如要求0..399中的数字并除以100)

C++方法 <>既然你使用C++,你不妨学习如何正确地处理它。
#include <chrono>
#include <random>

int random_in_range( int minimum, int maximum )
{
  thread_local std::ranlux48 rng( 
    std::chrono::system_clock::now().time_since_epoch().count() );
  return std::uniform_int_distribution <int> ( minimum, maximum )( rng );
}

...

set1 = random_in_range( 100, 999 );
#包括
#包括
整数随机