思路:先产生一个1到100的顺序数组a和一个目标数组b,然后记录一个变量range(a中剩下的元素个数),然后一个for循环(i从1到100),每次产生一个1到range的随机数index,然后把a[index]赋值给b[i],然后把a[range]赋值给a[index],令range–。
c语言代码:
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main()
{
int a[100], b[100];
srand((unsigned)time(NULL));
for (int i = 0; i < 100; i++)
a[i] = i + 1;
int range = 100;
for (int i = 0; i < 100; i++) {
int r = rand() % range;//产生0到99的随机数
b[i] = a[r];
a[r] = a[range - 1]; //把最后一个值填充到当前值
range--;
}
for (int i = 0; i < 100; i++) { //输出随机数组b
cout << b[i] << " ";
if ((i+1) % 10 == 0)
cout << endl;
}
return 0;
}
参考博客:https://blog.csdn.net/ada168855/article/details/8874877