概述###
- 洗牌算法(可以归类到随即算法中),顾名思义,就是只利用一次循环等概率的取到不同的元素(牌)。
描述###
- 如果元素存在于数组中,即可将每次 random 到的元素 与 最后一个元素进行交换,然后 count--,即可。这相当于把这个元素删除,代码如下:
#include <iostream>
#include <ctime>
using namespace std;
const int maxn = 10;
int a[maxn];
int randomInt(int a)
{
return rand()%a;
}
void swapTwoElement(int*x,int*y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
int main()
{
int count = sizeof(a)/sizeof(int);
int count_b = count;
/**
*srand函数是随机数发生器的初始化函数。原型:void srand(unsigned int seed);
*srand和rand()配合使用产生伪随机数序列。
*/
srand((unsigned)time(NULL));
//初始化数组
for (int i = 0; i < count; ++i)
{
a[i] = i;
}
//随即的输出数组中的每一个数字
for (int i = 0; i < count_b; ++i)
{
int random = randomInt(count);
cout<<a[random]<<" ";
swapTwoElement(&a[random],&a[count-1]);
count--;
}
system("pause");
return 0;
}