⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 montyhall.cpp

📁 模拟Monty Hall 猜谜游戏
💻 CPP
字号:
// MontyHall.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<string>
#include<fstream>
#include<cmath>

using namespace std;

class Game {
private:
    string door[3];
    int guess;
    int choice;           //选择的操作
public:
    Game();
    int select();
    bool chkAnswer();
    ~Game();
};
Game::Game()
{
    int i=rand()%3;              //随机取得car存放的位置
    door[i]="car";
    for(int j=0;j<3;j++)
    {
           if(j!=i)
                  door[j]="goat";
    }
}
int Game::select()
{
    cout << "请选择汽车在哪扇门: ";
    cin >> guess;
    int goatNum;
    for(int i=0;i<3;i++)
    {
           if(i!=guess-1 && door[i]=="goat")
           {
                  goatNum=i+1;
                  break;
           }
    }
    cout << "\n主持人打开一扇有羊的门,门号为: " << goatNum << "\n\n";
    cout << "              现在您有三种选择方式:" << endl;
    cout << "---------------------------------------------------------" << endl;
   cout << "        1.维持原先的选择不变" << endl;
    cout << "        2.随机决定是维持原先的选择还是选择另一扇门" << endl;
    cout << "        3.直接选择另一扇门" << endl;
    cout << "---------------------------------------------------------" << endl;
    cout << "您选择的是: ";
    cin >> choice;
    int randNum;
    switch(choice)
    {
       case 1: 
              break;
       case 2:
              randNum=rand()%2;
              if(randNum==1)                 //为1选择另一扇门,为0选择不变
                     guess=6-goatNum-guess;   //得到剩下门的号码
              break;
       case 3:
           guess=6-goatNum-guess;      //直接选择另一扇门
              break;
    }     
    return choice;
}
bool Game::chkAnswer()
{
    bool right;
    ofstream outfile;
    outfile.open("statistic.txt",ios::app);
    outfile << "   谜底: " << endl
                  << "   1号门: " << door[0] << endl
               << "   2号门: " << door[1] << endl
                  << "   3号门: " << door[2] << endl;
    if(door[guess-1]=="car")
    {
           cout << "恭喜您,猜中了汽车!\n\n";
        outfile << "您选择的操作: " << choice << " 您猜中了!\n";    
           right=true;
    }
    else
    {
           cout << "抱歉,谢谢参与!\n\n";
        outfile << " 您选择的操作: " << choice << " 您失败了!\n";    
        right=false;
    }
    outfile << "-----------------------------------------------------\n\n";
    outfile.close();
    return right;
}
Game::~Game()
{
    cout << "新的游戏.................\n\n";
}
int main(){
    int select1=0,success1=0;
    int select2=0,success2=0;
    int select3=0,success3=0;
    for(int i=0;i<20;i++)
    {
           Game test;
           int select=test.select();
           bool right=test.chkAnswer();
           if(select==1){
                  select1++;
                  success1=(right? success1+1 :success1 );
           }
           else if(select==2){
                  select2++;
                  success2=(right? success2+1 :success2 );
           }
           else{
                  select3++;
                  success3=(right? success3+1 :success3 );
           }
    }
    outfile << "\n\n一共进行了20次游戏\n";
    if(select1!=0){
           outfile << "选择操作 1 有 " << select1 << " 次\t" <<"成功概率: " << success1*100.0/select1 << "%\n";
    }
    if(select2!=0){
           outfile << "选择操作 2 有 " << select2 << " 次\t" <<"成功概率: " << success2*100.0/select2 << "%\n";
    }
    if(select3!=0){
           outfile << "选择操作 3 有 " << select3 << " 次\t" <<"成功概率: " << success3*100.0/select3 << "%\n";
    }
    outfile.close();         
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -