求随机数教程
  • 板块灌水区
  • 楼主LaFanCYC
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/12/6 19:51
  • 上次更新2024/12/6 21:24:43
查看原帖
求随机数教程
1387566
LaFanCYC楼主2024/12/6 19:51

想写一个能自动生成跑团角色属性的骰娘程序

一开始用的rand()函数

然后发现每次结果都一样

于是在查了一下教程后使用了

random_device

然鹅感觉还是不太对劲

求各位看看该程序生成的随机数是否和物理骰子概率分布一样

代码见下

#include<bits/stdc++.h>
using namespace std;
int st,de,co,in,ed,si,po,luk,app;
int sum[114514],msum[114514];
void roll() {
	std::random_device rd;
	std::uniform_int_distribution<int> dist(1,6);
	st=(dist(rd))+(dist(rd))+(dist(rd));
	de=(dist(rd))+(dist(rd))+(dist(rd));
	co=(dist(rd))+(dist(rd))+(dist(rd));
	po=(dist(rd))+(dist(rd))+(dist(rd));
	app=(dist(rd))+(dist(rd))+(dist(rd));
	luk=(dist(rd))+(dist(rd))+(dist(rd));
	ed=(dist(rd))+(dist(rd))+6;
	in=(dist(rd))+(dist(rd))+6;
	si=(dist(rd))+(dist(rd))+6;
	st*=5;
	de*=5;
	co*=5;
	po*=5;
	app*=5;
	luk*=5;
	ed*=5;
	in*=5;
	si*=5;
}
int main() {
	std::random_device rd;
	std::uniform_int_distribution<int> disb(1,10);
	int n;
	cin>>n;
	cout<<"力量:          ";
	for(int i=1; i<=n; i++) {
		roll();
		if(st==90) st+=disb(rd);
		printf("%4d",st);
		sum[i]+=st;
		msum[i]+=st;
	}
	cout<<endl;
	cout<<"体质:          ";
	for(int i=1; i<=n; i++) {
		roll();
		if(co==90) co+=disb(rd);
		printf("%4d",co);
		sum[i]+=co;
		msum[i]+=co;
	}
	cout<<endl;
	cout<<"体型:          ";
	for(int i=1; i<=n; i++) {
		roll();
		if(si==90) si+=disb(rd);
		printf("%4d",si);
		sum[i]+=si;
		msum[i]+=si;
	}
	cout<<endl;
	cout<<"敏捷:          ";
	for(int i=1; i<=n; i++) {
		roll();
		if(de==90) de+=disb(rd);
		printf("%4d",de);
		sum[i]+=de;
		msum[i]+=de;
	}
	cout<<endl;
	cout<<"外貌:          ";
	for(int i=1; i<=n; i++) {
		roll();
		if(app==90) app+=disb(rd);
		printf("%4d",app);
		sum[i]+=app;
		msum[i]+=app;
	}
	cout<<endl;
	cout<<"教育:          ";
	for(int i=1; i<=n; i++) {
		roll();
		if(ed==90) ed+=disb(rd);
		printf("%4d",ed);
		sum[i]+=ed;
		msum[i]+=ed;
	}
	cout<<endl;
	cout<<"智力:          ";
	for(int i=1; i<=n; i++) {
		roll();
		if(in==90) in+=disb(rd);
		printf("%4d",in);
		sum[i]+=in;
		msum[i]+=in;
	}
	cout<<endl;
	cout<<"意志:          ";
	for(int i=1; i<=n; i++) {
		roll();
		if(po==90) po+=disb(rd);
		printf("%4d",po);
		sum[i]+=po;
		msum[i]+=po;
	}
	cout<<endl;
	cout<<"幸运:          ";
	for(int i=1; i<=n; i++) {
		roll();
		printf("%4d",luk);
		sum[i]+=luk;
	}
	cout<<endl;
	cout<<"总和(不含运):";
	for(int i=1; i<=n; i++)
		printf("%4d",msum[i]);
	cout<<endl;
	cout<<"总和(含幸运):";
	for(int i=1; i<=n; i++)
		printf("%4d",sum[i]);
	return 0;
}

orz

2024/12/6 19:51
加载中...