首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rand()的C++简单0-10乘法闪存卡

使用rand()的C++简单0-10乘法闪存卡
EN

Stack Overflow用户
提问于 2012-09-10 07:09:36
回答 4查看 2.2K关注 0票数 1

我在理解c++中的rand()和srand()概念时遇到了麻烦。我需要创建一个显示两个随机数的程序,让用户输入响应,然后将响应与消息进行匹配,并执行此操作5次。

我的问题是如何使用它,说明说我不能使用time()函数,这似乎在每一个关于rand()的在线教程中都有。

这就是我到目前为止所拥有的。

代码语言:javascript
复制
#include <iostream>
#include <cmath>
#include <cstdlib>

using namespace std;

int main()
{

int seed;
int response;

srand(1969);
seed=(rand()%10+1);

cout<<seed<<" * "<<seed<<" = ";
cin>>response;
cout<<response;
    if(response==seed*seed)
    cout<<"Correct!. you have correctly answered 1 out of 1."<<endl;
    else 
    cout<<"Wrong!. You have correctly answered 0 out of 1."<<endl;

这只是输出类似6*6或7*7的东西,我认为种子变量不一定是不同的,但不是一直相同的?

下面是输出应该是这样的:

代码语言:javascript
复制
3 * 5 =
34
Wrongo. You have correctly answered 0 out of 1.
8 * 1 =
23
Wrongo. You have correctly answered 0 out of 2.
7 * 1 =
7
Correct! You have correctly answered 1 out of 3.
2 * 0 =
2
Wrongo. You have correctly answered 1 out of 4.
8 * 1 =
8
Correct! You have correctly answered 2 out of 5.

Final Results: You have correctly answered 2 out of 5 for a 40% average.

以下是要求:

您的程序应该根据需要使用rand()来生成伪随机数。您可以使用srand()来初始化随机数生成器,但请不要使用任何“自动”初始化器(如time()函数),因为它们可能与平台相关。你的程序不应该使用任何循环。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-10 07:37:57

你现在使用它的方式看起来很好。所有教程都使用time()的原因是,每次运行程序时,数字都会有所不同。所以,如果你使用一个固定的数字,每次你的程序运行时,输出(数字生成)将是相同的。但是,根据您的要求,这似乎不是问题(如果您需要每次运行程序时随机生成都不同,请在您的问题中指定)。

但是,rand()%10+11 to 10的一个范围,而不是您想要的0 to 10

编辑后的

要获得所需的输出,您只需生成两个种子,如下所示:

代码语言:javascript
复制
seed1=(rand()%11);
seed2=(rand()%11);
cout<<seed1<<" * "<<seed2<<" = ";

此外,您还可以向用户索要seed,然后将其传递给srand,以使每次运行更加随机。

关于要求:

请不要使用任何'automatic‘初始值设定项(比如()函数),因为它们很可能是平台相关的

std::time<ctime>报头中的标准C++函数。我不明白如果结果是平台相关的,这有什么关系。

你的程序不应该使用任何循环。

这也是一个非常奇怪的要求。循环是任何程序的基本构建块。这些要求对我来说似乎很奇怪,我想请你们的教授或老师澄清一下。

票数 1
EN

Stack Overflow用户

发布于 2012-09-10 08:07:00

顺便说一下,既然这是C++,你真的应该尝试使用std::uniform_int_distribution,例如

代码语言:javascript
复制
#include <functional>
#include <random>
...
auto rand = std::bind(std::uniform_int_distribution<unsigned>(0, 10),
    std::default_random_engine());

现在,您只需使用rand()以所需的间隔生成一个数字即可。

票数 2
EN

Stack Overflow用户

发布于 2012-09-10 07:24:35

您可以使用srand()作为随机函数的种子。这是必要的,否则每次运行和每次调用rand()时都会得到相同的数字序列

你可以随心所欲地播种兰特。你会发现大多数教程使用当前时间作为种子,因为每次运行程序时返回的数字通常不同。

如果您确实不能使用time()功能,我会将种子作为命令行参数传递。

代码语言:javascript
复制
int main(int argc, char* argv[])
{
    srand(atoi(argv[1])); // Seed with command line argument.
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12343733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档