做作業(yè)時候遇到這個問題,感覺這種算法很快捷
一個洗牌的算法。。多線程沒做出來然后放棄了
生成1-52之內(nèi)的不重復(fù)隨機(jī)數(shù),一個數(shù)代表了一張牌,循環(huán)52次即摸牌完畢。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
string a[5]={"紅桃","方片","黑桃","梅花"};
string b[15]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
string c[60]={"0"};
int k=0; //總牌數(shù),初始化為0
srand((int)time(0));
//初始化牌堆
for(int i=0;i<4;i++)
for(int j=0;j<13;j++)
{
c[k]=a[i]+b[j];
k++;
}
//循環(huán)計數(shù)遞減,每抽取一個字符串就將其放到字符串組末尾,從下次循環(huán)中剔除
for(int i=k;i>=1;i--)
{
int temp = rand()%i ;
cout<<"第"<<i<<"張:"<<c[temp]<<endl;
swap(c[temp],c[i-1]);
}
return 0;
}