题目:
给定N张扑克牌和一个随机函数,设计一个洗牌算法
思路:
假设数组A存的是扑克牌代表的数字,则洗牌的过程就是数组中元素交换的过程。
洗牌是个随机的过程,也是一个排列组合的过程。
假设有N张牌,则其排列组合的可能情况为N!=N*(N-1)*....*2*1。
有两种的随机洗牌函数:
1、A[i]=A[rand()%N]
2、A[i]=A[rand()%(N-i)]
但第一种情况得到的选择可能为N^N,而第二种情况为N!
因此第二种随机算法更符合。
代码:
void shuffle(int a[],int len){ int val,tmp; for(int i=0;i<len;i++){ val=i+rand()%(len-i); tmp=a[i]; a[i]=a[val]; a[val]=tmp; } }
时间: 2024-10-07 05:02:20