SCAU 统计学 实验1

假设n(n≥6)个人玩“单人出局”的游戏确定下一次谁买饮料,n个人同时掷均匀的使巾,每人一个。

如果除了一个以外其余所有硬币的结果都相同,那么这个掷出不同结果的人将买饮料。否则,这些人再次掷硬币,直到出现一个硬币与其他所有的硬币结果不同为止。

a)仅仅掷一次硬币,这个人就能确定下来的概率是多少?
b)从 n个人中确定这个人预期需要掷多少次硬币?

利用计算机仿真,求解上述问题。

第一问:

#include 
#include 

using namespace std;

int main()
{
    int person_num;
    cout<<"请输入参与实验的人数:"<<endl;
    cin>>person_num;

    double test_count=0;  //记录实验次数
    double success=0;  //记录成功次数
    long Max=2000;  //模拟实验总次数

    int count1;  //正面朝上人数
    int count2;  //反面朝上人数

    while(true){
        count1=0;  //每次实验开始时置零
        count2=0;
        for(int i=0;i<person_num;i++){
            int result=rand()%100;  //生成0-99的随机数
            cout<<result<<endl;
            if(result>=50){
                count1++;
            }else{
                count2++;
            }
        }
        test_count++;
        if(count1==1||count2==1){
            success++;
        }
        if(test_count==Max){  //达到总次数退出
            break;
        }
    }
    double p=success/test_count;  //概率
    cout<<"成功的概率:"<<p<<endl;

    return 0;
}

第二问:

#include 
#include 

using namespace std;

int main()
{
    int person_num;
    cout<<"请输入参与实验的人数:"<<endl;
    cin>>person_num;

    double total_sucess=0;  //被成功选中的总次数
    double total_unsucess=0;  //被选中需要投掷的总次数
    long Max=100000;  //模拟实验次数

    int count1;  //正面朝上人数
    int count2;  //反面朝上人数
    int count=0;  //记录实验次数

    while(true){
        count1=0;  //置零
        count2=0;
        for(int i=0;i<person_num;i++){
            int result=rand()%100;
            if(result>=50){
                count1++;
            }else{
                count2++;
            }
        }
        count++;
        if(count1==1||count2==1){
            total_sucess++;
            total_unsucess++;  //成功选中要投掷的次数也要加1
        }else{
            total_unsucess++;
        }
        if(count==Max){
            break;
        }
    }
    double p=total_unsucess/total_sucess;  //被选到要投掷的次数
    cout<<"投掷次数:"<<p<<endl;

    return 0;

你可能感兴趣的:(2023SCAU统计学,算法,c++,开发语言)