天天看点

第十七章 17.4.2节练习

练习17.31

对于本节中的游戏程序,如果在do循环内定义b和e,会发生什么?

解答:

#include <iostream>
#include <random>
#include <string>

using namespace std;

int main(){
  string resp;
  //default_random_engine e;
  //bernoulli_distribution b;
  do{
  default_random_engine e;
  bernoulli_distribution b;
    cout << e() << endl;
    cout << b(e) << endl;
    bool first = b(e);
    cout << (first? "We go first" : "You get to go first") << endl;
    //cout << ((play(first))? "Sorry, you lost" : "congrats, you won") << endl;
    cout << "play again? Enter 'yes' or 'no'" << endl;
  } while(cin >> resp && resp[0] == 'y');
}
           

可以尝试这样写代码进行验证。

b放在循环内部,或者循环外部都是可以的。

但是,当把e的声明放在循环内部的话,每次生成的数就一样了。放在循环外部e就能保持状态,每次都会生成不同的随机数。

练习17.32

如果我们再循环内部定义resp,会发生声明?

解答:

这个很容易看出来。编译阶段就会出现问题。

在while语句中肯定会提示resp没有定义。

练习17.33

修改11.3.6节(第392页)中的单词转换程序,允许你对一个给定单词有多种转换方式,每次随机选择一种进行实际转换。

解答:

这个就略过吧。

用随机数操作来进行选择对应的转换即可。

继续阅读