無重複隨機數生成

weixin_34050427發表於2017-09-12

做作業時候遇到這個問題,感覺這種演算法很快捷
一個洗牌的演算法。。多執行緒沒做出來然後放棄了

生成1-52之內的不重複隨機數,一個數代表了一張牌,迴圈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;            //總牌數,初始化為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++;
        }
    
//迴圈計數遞減,每抽取一個字串就將其放到字串組末尾,從下次迴圈中剔除
for(int i=k;i>=1;i--)
    {
        int temp = rand()%i ;
        cout<<"第"<<i<<"張:"<<c[temp]<<endl;
        swap(c[temp],c[i-1]);
    }
    return 0;
}

相關文章