产生随机数.数字越小出现的概率越大

qq43695548 2010-07-21 01:44:00
从0到360之间产生一个随机数,数字越小出现的概率越大
...全文
1618 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
GetStudyMessages 2010-07-21
  • 打赏
  • 举报
回复
Random ran = new Random()

int num = ran.Next(1,360)

int getNum = ran.Next(1,num)
qq43695548 2010-07-21
  • 打赏
  • 举报
回复
结贴

其实也就是一个数列求和问题

n的概率是(361-n)/sum,求前n项的和


justfortemp 2010-07-21
  • 打赏
  • 举报
回复
nnd 这是一个数学概率问题 楼主为什么要出个数学问题呢 我概率本来就不好
完了 脑子里纠结了
justfortemp 2010-07-21
  • 打赏
  • 举报
回复
不对 出现 1的概率是 2/360
justfortemp 2010-07-21
  • 打赏
  • 举报
回复
int a=rand(1,360)
int b=rand(1,360)
取a b 中最小的一个

想了下 完全可以满足楼主的要求

出现 360 360的概率是 1/(360*360)
出现 1的概率是 1/360
1出现的概率不就是360出现的概率的360倍吗

[Quote=引用 10 楼 justfortemp 的回复:]
多用几个随机
int a=rand(0,360)
int c=rand(0,360)
int b=rand(0,360)
取a b C 中最小的一个
一般两次随机就能够实现了 3次360就不好出现了
[/Quote]
段传涛 2010-07-21
  • 打赏
  • 举报
回复
Random ran = new Random();
int[] myarry =new int [10];
int n =0;
for (int i = 0; i < myarry.Length; i++)
{
myarry[n] = ran.Next(0,360);
n++;
}
Array.Sort(myarry );
foreach (int em in myarry)
{
Response.Write(em +"," );
}
leonbyron 2010-07-21
  • 打赏
  • 举报
回复
说个蠢办法,建一个数组,把1-360按概率往里扔,之后用random给出数组下标。
justfortemp 2010-07-21
  • 打赏
  • 举报
回复
9:45
8:44 43
7:42 41 40
6:39 38 37 36
5:35 34 33 32 31
4:30 29 28 27 26 25
3:24 23 22 21 20 19 18
2:17 16 15 14 13 12 11 10
1:9 8 7 6 5 4 3 2 1

程序应该好实现 怎么实现最优算法呢。
宇峰科技 2010-07-21
  • 打赏
  • 举报
回复
没试过啊
qq43695548 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wanghui0380 的回复:]
360,359-------2,1
等差数列求合得到sum值

rad(1,sum)就ok了,剩下的就是判定他在那个和值区间内
[/Quote]

是这样的
Neil198 2010-07-21
  • 打赏
  • 举报
回复
这样小的数的几率就大了,但是0-36之间出现的几率差不多,
可以把P范围设置在(1,100)
以下是 1-100的随机数出
6
12
1
1
0
0
7
18
2
2
83
1
6
0
4
0
1
3
2
12
0
24
0
1
0
0
1
29
1
34
1
2
3
0
2
1
3
5
3
4
2
0
165
0
301
3
4
2
5
2
22
1
4
3
0
12
7
17
3
1
92
1
2
0
112
1
16
13
1
0
0
4
1
4
15
4
0
4
1
12
2
0
7
29
1
7
4
4
6
6
5
0
0
0
4
15
2
0
5
6
fuxiyang 2010-07-21
  • 打赏
  • 举报
回复
需要提供概率密度吧
Neil198 2010-07-21
  • 打赏
  • 举报
回复

Random rd = new Random();

int p = rd.Next(1, 10);

result = rd.Next(0, 361 / p);

Console.WriteLine(result);

如果 P = 10 就随机 0-36
如果 p = 9 就随机 0-40
如果 p = 8 就随机 0-45
.....
如果 p=1 就随机 0-360

wanghui0380 2010-07-21
  • 打赏
  • 举报
回复
360,359-------2,1
等差数列求合得到sum值

rad(1,sum)就ok了,剩下的就是判定他在那个和值区间内

justfortemp 2010-07-21
  • 打赏
  • 举报
回复
不对
[Quote=引用 15 楼 justfortemp 的回复:]
这个要求出现概率跟数字本身有关系的,
比如,总数为1到360的和设为a,1出现的概率为360/a,360出现概率为1/a

sum=0+....+359;
int x=rand(0,sum)
x=x%360;
x=x+1;
大概思路是这样的 你看看怎么调整下x=0 的时候的情况
[/Quote]
justfortemp 2010-07-21
  • 打赏
  • 举报
回复
这个要求出现概率跟数字本身有关系的,
比如,总数为1到360的和设为a,1出现的概率为360/a,360出现概率为1/a

sum=0+....+359;
int x=rand(0,sum)
x=x%360;
x=x+1;
大概思路是这样的 你看看怎么调整下x=0 的时候的情况
justfortemp 2010-07-21
  • 打赏
  • 举报
回复
你的意思是 如果 1-360 360出现的概率是X 那么 1的概率是X*360是不是?
sxiaohui8709253 2010-07-21
  • 打赏
  • 举报
回复
这个概率是线性的么 好歹概率给个统计列表啥的 不然没法搞吧
justfortemp 2010-07-21
  • 打赏
  • 举报
回复
这个要求出现概率跟数字本身有关系的,
比如,总数为1到360的和设为a,1出现的概率为360/a,360出现概率为1/a

1 为360/a 360为 1/a
请问 2-359的概率为0?
qq43695548 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 justfortemp 的回复:]
多用几个随机
int a=rand(0,360)
int c=rand(0,360)
int b=rand(0,360)
取a b C 中最小的一个
一般两次随机就能够实现了 3次360就不好出现了
[/Quote]

这个要求出现概率跟数字本身有关系的,
比如,总数为1到360的和设为a,1出现的概率为360/a,360出现概率为1/a

加载更多回复(10)

111,075

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧