题目:随机洗三副牌,其中一副牌里面多两个二,两个五,一个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++尝试编写,欢迎留言!!!!!