N张牌和随机函数,设计一个洗牌算法

来源:互联网 发布:数据库服务 编辑:程序博客网 时间:2024/05/16 08:57

给定N张扑克牌和一个随机函数,设计一个洗牌算法

本题初看,不知何意。看了讨论才明白多刷题的重要性。倒是不难,关键是知道题目的意思。

题意理解:有一个随机函数发生器,能够产生1N之间的随机数。以扑克牌为例,N=54。洗牌算法要保证放置的第一张牌是54种可能,放置第2张牌时是53种可能…以此类推。直至全部洗完。

// shuffle_card.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <time.h>using namespace std;void swap(int &a, int &b){    int tmp = a;    a = b;    b = tmp;}void shuffle(int a[], int n) {    for (int i = 0; i < n; i++)    {        //from n-i get rand        int j = rand() % (n - i) + i;        swap(a[i], a[j]);    }}int main(){    //rand seed    srand((unsigned)time(nullptr));    int n = 9;    int a[] = {1,2,3,4,5,6,7,8,9};    shuffle(a, n);    for (int i = 0; i < n; i++)        cout << a[i] << endl;    return 0;}
原创粉丝点击