游戏开发论坛

 找回密码
 立即注册
搜索
楼主: passiongame

一个并不复杂的问题,但是我想不出一个高效的算法

[复制链接]

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2005-1-19 12:45:00 | 显示全部楼层

Re:一个并不复杂的问题,但是我想不出一个高效的算法,

如何不对法?

2

主题

21

帖子

25

积分

注册会员

Rank: 2

积分
25
 楼主| 发表于 2005-1-19 12:47:00 | 显示全部楼层

Re:一个并不复杂的问题,但是我想不出一个高效的算法,

因为我的要求是随机产生1到9的三个数,如果按照2楼的做法,第三个数可能要超过这个范围

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2005-1-19 12:49:00 | 显示全部楼层

Re:一个并不复杂的问题,但是我想不出一个高效的算法,

................................................................................
漏看了.......................................................................
................................................................................
偶是垃圾....喝高了...

8

主题

111

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2005-1-19 12:51:00 | 显示全部楼层

Re:一个并不复杂的问题,但是我想不出一个高效的算法,

这样行不行?

a3=rand((19-1)/3+1,min(9,19-2));//inclusive,最大值的取值范围内求随机数
a2=rand(((19-a3)-1)/2+1,min(a3,19-a3-1));//inclusive,次大值的取值范围内求随机数

a1=19-a3-a2;



59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-1-19 13:13:00 | 显示全部楼层

Re:一个并不复杂的问题,但是我想不出一个高效的算法,

...原来你是要从1-9的,那这样吧:
int a = 1 + rand() % 9;
int b = (9 - a) + rand() % a
int c = 19 - a - b;

不过理论上讲,六楼我发的那个是分布最均匀的。

2

主题

21

帖子

25

积分

注册会员

Rank: 2

积分
25
 楼主| 发表于 2005-1-19 13:16:00 | 显示全部楼层

Re:一个并不复杂的问题,但是我想不出一个高效的算法,

14楼很强啊,好像是对的。。多谢阿,各位老大再看看14楼的行不!!!!!!

63

主题

871

帖子

891

积分

高级会员

Rank: 4

积分
891
QQ
发表于 2005-1-19 13:21:00 | 显示全部楼层

看看我的

int a = 0, b = 0, c = 0;

randomize();
a = 1 + rand() % 9;

while (a + b < 10)
  b = 1 + rand() % 9;

c = 19 - a - b;

2

主题

21

帖子

25

积分

注册会员

Rank: 2

积分
25
 楼主| 发表于 2005-1-19 13:23:00 | 显示全部楼层

Re:一个并不复杂的问题,但是我想不出一个高效的算法,

还是15楼的最爽阿。。哈哈。。。都是牛人啊

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-1-19 13:26:00 | 显示全部楼层

Re:一个并不复杂的问题,但是我想不出一个高效的算法,

15楼的有几个问题。
首先rand() % 8 + 1是取从1-8,而不是从1-9,因为rand()%8是从0-7
另外取第二个数的时候用while()去做真跟楼上讲的开个循环,不停的去满足条件是一样的效果了。

其中while那一步可以抽象出来9 - a + rand() % a,不明白自己多看看就明白了。

63

主题

871

帖子

891

积分

高级会员

Rank: 4

积分
891
QQ
发表于 2005-1-19 13:37:00 | 显示全部楼层

Re:一个并不复杂的问题,但是我想不出一个高效的算法,

上面改过了 XI~ XI~

万一 a=9 时
b不就有机会成0了吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 03:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表