有一个大小为n的数组,设计算法随机的从里面选择k个数。(假设randint(a,b)是从闭区间[a,b]选择一个整数)。
要求:c/c++,使用洗牌算法
有一个大小为n的数组,设计算法随机的从里面选择k个数。(假设randint(a,b)是从闭区间[a,b]选择一个整数)。
要求:c/c++,使用洗牌算法
如下:
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
int a[1000];
int b[1000];
int i, j,k, n;
srand((unsigned int)time(0)); //随机数种子
cout << "请输入n:";
cin >> n;
cout << "请输入" << n << "个数:";
for (i = 0; i < n; i++)
cin >> a[i];
cout << "请输入k:";
cin >> k;
//从n个数中抽取k个
for (i = 0, j = 0; i < k; i++)
{
int index = rand() % n;//生成0-n-1的随机数
b[j++] = a[index];
}
//输出随机抽取的k个数
for (i = 0; i < k; i++)
cout << b[i] << " ";
return 0;
}