首页 新闻 会员 周边

算法:有点难

0
悬赏园豆:10 [已关闭问题]

有一个数n(n>0),要求产生0到6个数(a,b,c,d,e,f,g),它们皆小于n

并且n和a,b,c,d,e,f,g尽量少的重复

 

比如n=100时,如果 a=10,b=15,c=20.....

那么n=101时,a,b,c,d,e,f,g就尽量不要出现10和15,10和20,15和20这种组合

yuejianjun的主页 yuejianjun | 初学一级 | 园豆:20
提问于:2010-05-17 15:25
< >
分享
其他回答(2)
0

这个“尽量”说的太模糊了,到底是允许还是不允许?

麒麟.NET | 园豆:3614 (老鸟四级) | 2010-05-17 15:39
0

呵呵,和楼上意思一样,你这个尽量逻辑可不好写。

建一个HashTable,把每次生成过的项都存进去,每次生成的时候判断一下,因为是键值对,效率没有问题,如果存在再随机出来一个。

Astar | 园豆:40805 (高人七级) | 2010-05-17 15:46
0

楼上的办法,如果这个 hushtable 中的数总数接近 n 时,随机数命中的概率会很低,效率会有问题。

楼主的题目出的不严谨,a,b,c,d,e,f,g 是什么样的数?正整数,自然数还是整数?a,b,c,d,e,f,g 数的选择是否要随机,还是随便?如果随便,那很简单 n = 100 时 取 1,2,3,4,5,6,7 n = 101 时取 8,9,10,11,12,13,14 弄个指针循环取就完了,如果要随机的也不难,设n的最大值为m ,将m的值打乱,存到数组或hashtable中,然后还是按上面方法取,比如 array[1] = 10, array[2] = 15, array[3] = 20 以此类推,n = 100 时取下标为 1-7的 数组值,n=101 时取 下标为 8-14 的数组值,这样循环下去,当取出来的数大于等于n 时往后跳一个继续取。

 

 

eaglet | 园豆:17139 (专家六级) | 2010-05-18 08:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册