本地生成随机数
  • 板块学术版
  • 楼主QCM4902
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/1/25 21:36
  • 上次更新2025/1/26 10:50:37
查看原帖
本地生成随机数
808354
QCM4902楼主2025/1/25 21:36

在C++11里,可以通过以下代码来生成随机数列:

random_device rd;
mt19937 generator(rd());
uniform_int_distribution<int> dist(1,n);
for(i=1; i<=n-2; i++){
    x[i]=dist(generator);
}

但是这样生成的随机数列似乎无法做到“真正随机”的效果,在本地实测时生成的总是同一个数列,但在洛谷IDE里却能给出不同的数列。

我认为这主要由

random_device rd;

是根据设备信息选择随机种子,而使用同一台设备将会一直是同一个随机数种子所致。

请问有无方法在本地实现真正的随机?

附:实验代码如下

#include <bits/stdc++.h>
using namespace std;
const int m=1000;
int main() {
	random_device rd;
	mt19937 generator(rd());
	int x[m],y[m],n,i,j;
	bool b[m];
	scanf("%d",&n);
	uniform_int_distribution<int> dist(1,n);
	for(i=1; i<=n-2; i++) {
		x[i]=dist(generator);
	}
	x[n-1]=n;
	for(i=1; i<=n-1; i++) {
		memset(b,0,sizeof(b));
		for(j=1; j<=i-1; j++) {
			b[y[j]]=1;
		}
		for(j=i; j<=n-1; j++) {
			b[x[j]]=1;
		}
		for(j=1; j<=n; j++) {
			if(!b[j]) {
				y[i]=j;
				break;
			}
		}
	}
	for(i=1; i<=n-1; i++) {
		printf("%d %d\n",x[i],y[i]);
	}
	return 0;
}

效果图如下: 在本地运行时即使运行多次也只会给出这一种结果

在本地运行时即使运行多次也只会给出这一种结果

结果1

结果2

在洛谷IDE上运行得到的两个不同结果

2025/1/25 21:36
加载中...