游戏开发论坛

 找回密码
 立即注册
搜索
查看: 9290|回复: 33

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

[复制链接]

2

主题

21

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2005-1-19 11:18:00 | 显示全部楼层 |阅读模式
要求很简单,随机产生三个数(必须是1---9),他们的和等于某个数比如说19。
请各位老大不吝指教

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

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

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

int a = rand() % 19;
int b = rand() % ( 19 - a );
int c = 19 - a - b;

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2005-1-19 11:33:00 | 显示全部楼层

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

楼上的还可以

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2005-1-19 11:34:00 | 显示全部楼层

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

随好能随机一下种子

2

主题

21

帖子

25

积分

注册会员

Rank: 2

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

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

按照2楼的方法:
a = 1;
b = 1;
c = 17;(超过了范围)
这样好像不行吧!!

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

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

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

或者随机生成两次,产生三个数之间的比例关系,然后求解:
即a:b c:d = ac : bc : bd
int a = rand() % 100;
int b = rand() % 100;
int c = (100 - a) * (100 - b);
int temp = b;
b = (100 - a) * b;
a = a * temp;

const int num = 19;
float fa = num * (a * 1.0 / (a + b + c));
float fb = num * (b * 1.0 / (a + b + c));
float fc = num * (c * 1.0 / (a + b + c));

2

主题

21

帖子

25

积分

注册会员

Rank: 2

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

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

看起来不错的算法,思路也很好,可惜我没有完全看懂。请您说详细点吧!!!

31

主题

630

帖子

635

积分

高级会员

Rank: 4

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

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

确实好简单哦
不断产生随机数进行试验,符合要求就返回;不符合就重试。
[em2]
大家不要扔鸡蛋!

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

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

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

2楼的就够用了。个人感觉。
srand(seed)一下就够了~

2

主题

21

帖子

25

积分

注册会员

Rank: 2

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

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

谢谢各位回复,2楼的算法是不对的,6楼的算法好像是对的,可惜我没看明白。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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