三副牌打乱重洗,第一张大于第二张的概率C++

题目:随机洗三副牌,其中一副牌里面多两个二,两个五,一个Q。找出第一张牌大于第二张牌的次数,循环50000次。概率为53%。(做的比较仓促,难点在于洗牌的描述,要保证每次洗牌时刚开始牌库是按照顺序的,紧接着洗牌是按照第一次洗过的牌进行第二次洗牌,依次循环。可能有不对的地方,希望大家多多指教留言)

/**author@baibisen
   抽牌游戏**/

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

//最初的牌库
int cl[161] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
               1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
               1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
               1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
               1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
               1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
               2, 2, 5, 5, 12}; //1表示A,11,12,13分别表示J,Q,K
//int guess[3] = {0, 1, 2}; //0表示小于,1表示大于,2表示相等
int n = sizeof(cl) / sizeof(int);
long int sum = 0;
double r; //第一张牌大于第二张牌的概率
int main()
{
    int c; //c为抽样的次数
    cout << "输入循环次数:"
         << " ";
    cin >> c;
    for (int m = 0; m < c; m++)
    {
        //对x[]进行随机处理(洗牌)
        cout << "Enter the old cl[]= ";
        cout << endl;
        for (int i = 0; i < n; i++)
        {
            cout << cl[i] << " ";
        }
        cout << endl;

        srand((unsigned)time(NULL));

        for (int i = n - 1; i > 0; i--)
        {
            int j = rand() % i;
            int y = cl[i];
            cl[i] = cl[j];
            cl[j] = y;
        }

        cout << "Enter the persent cl[]= ";
        cout << endl;
        for (int i = 0; i < n; i++)
        {
            cout << cl[i] << " ";
        }
        cout << endl;

        //进行比较操作
        if (cl[0] >= cl[1])
        {
            cout << "第一次sum="
                 << " ";
            sum++;
            cout << sum;
        }
        cout << endl;
    }
    r = 100 * sum / c;
    cout << "第一张牌大于第二张牌的概率为:" << r << "%" << endl;

    return 0;
}

还有另一个题目,简述如下:

吉占:摸牌阶段,你可以改为展示牌堆顶的一张牌,猜测牌堆顶的下一张牌点数大于或小于此牌,然后展示之,若猜对,你可重复此流程,然后你获得以此法展示的牌。

        牌库中存在3套牌,一套牌有52张(4X13),在此基础上添加2,Q两张,5一张作为牌库。随机取一张作为库顶,从剩余牌中取一张,比大小(只能比大小),正确则继续,错误则退出。求、按照某种特定的策略,计算能打开的最大牌数N(包含已经被打开的,也就是说N>=2)。大家可用C++尝试编写,欢迎留言!!!!!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值