请大家帮忙,今天去应聘程序后台开发出的一个算法,我当时没解出来……

lovewangya 2017-09-14 12:05:26
数据库表结构这样的就一个字段
id(数据类型为整形)
-----------
1
-----------
2
-----------
3
-----------
......................................
.......................................
100
-----------
数据库表当中就一个字段,表记录为按顺序的1-100的数字集合。想要通过fixedRand()函数实现这样的一个算法
输入表中id的值,再给key(key的值可根据自己的算法自己定义)一个参数,返回3个不重复的1-100之间的随机数,下次输入相同的key输出的随机数是一样的,例如:

fixedRand(1,100,"****",1);//此时id=1,函数通过与key的结合返回1-100间的三个随机数例如:3,8,9
fixedRand(1,100,"****",2);//此时id=2,函数通过与key的结合返回1-100间的三个随机数例如:7,2,3
fixedRand(1,100,"****",3);//此时id=3,函数通过与key的结合返回1-100间的三个随机数例如:99,50,1

function fixedRand($minId=1,$maxId=100,$id,$key)
{
......
......
return $value;
}


...全文
789 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
游北亮 2017-09-15
  • 打赏
  • 举报
回复
你要求所有机器输入一个id,都得到相同的3个数,那不叫随机数好吧? 最简单的,输入id,输出 id+1 id+2 id+3,觉得不够随机,输出id+11 id+23 id+35 结果超过100就减100, 所以如果上述解决方案不可行,说明是需求不清晰
xuzuning 2017-09-15
  • 打赏
  • 举报
回复
不同版本php的伪随机生成多项式可能有所不同 依赖环境的程序,不是健壮的程序
jip0303 2017-09-14
  • 打赏
  • 举报
回复
98,31,8
47,65,27
37,98,86


wamp下和LNMP下都是上面结果


另外为什么我不可以传图片???!!!
大和屋家小黑 2017-09-14
  • 打赏
  • 举报
回复
lovewangya 2017-09-14
  • 打赏
  • 举报
回复
lovewangya 2017-09-14
  • 打赏
  • 举报
回复
嗯,和我的一样,不知道是否是移植到其它服务器也是这个结果,还请版主和路过的老师,出来分析 一下,谢谢
兽兽 2017-09-14
  • 打赏
  • 举报
回复
lovewangya 2017-09-14
  • 打赏
  • 举报
回复
下面这段代码可以实现我的需求,我把strand()换成了mt_strand(),rand()换成了mt_rand(),下面的代码,我换了两个服务器都输出: 98,31,8 47,65,27 37,98,86 麻烦各位也在自己的机器上测试一下是否输出结果一样,是否与平台和php版本有有关系呢?如果大家都输出上面的结果,那么就这个函数我就可以投入生产了,谢谢大家 了
<?php
function fixedRand($minId=1,$maxId=100,$key)
{
    mt_srand($key); //相同的种子将产生相同的随机数序列
    for($i=0; $i<3; $i++) $r[] = mt_rand($minId, $maxId); //同一周期内是不会重复的(但缩小范围后不一定)
    return implode(',',$r);
}
for($i=0;$i<3;$i++)
{
	echo fixedRand(1,100,764355388+$i) . '<br>';
}
xuzuning 2017-09-14
  • 打赏
  • 举报
回复
你想让不同的机器获得相同的结果?这已经超出随机数的能力范围了 而属于加密解密的范畴
兽兽 2017-09-14
  • 打赏
  • 举报
回复
引用 4 楼 lovewangya 的回复:
都说是随机了。怎么可能会有一样的
兽兽 2017-09-14
  • 打赏
  • 举报
回复
有限时吗,感觉是不是太紧张了, 不应该啊, 我也是这样想的 一个rand()函数创建随机 然后循环出来
lovewangya 2017-09-14
  • 打赏
  • 举报
回复
多谢版本指点,有个问题还是不明白,再次请教一下,像上面这种算法如下代码,在本地电脑上运行的结果刷新若干次所得随机数不变是我想要的结果,但把此代码放在服务器上运行若干次所得随机数不变也是我想要的结果,但是本地服务器和远程服务器使用相同的key得到的结果不一样,不是我想要的结果,我想实现必须是一样的,请问老师有办法没?

<?php
function fixedRand($minId=1,$maxId=100,$key)
{
    srand($key); //相同的种子将产生相同的随机数序列
    for($i=0; $i<3; $i++) $r[] = rand($minId, $maxId); //同一周期内是不会重复的(但缩小范围后不一定)
    return implode(',',$r);
}
for($i=0;$i<3;$i++)
{
	echo fixedRand(1,100,764355388+$i) . '<br>';
}
本地输出: 95,27,27 56,48,74 17,68,21 远程输出: 89,35,29 11,11,70 33,86,10
xuzuning 2017-09-14
  • 打赏
  • 举报
回复
function fixedRand($minId=1,$maxId=100,$key)
{
    srand($key); //相同的种子将产生相同的随机数序列
    for($i=0; $i<3; $i++) $r[] = rand($miniId, $maxId); //同一周期内是不会重复的(但缩小范围后不一定)
    return $r;
}
lovewangya 2017-09-14
  • 打赏
  • 举报
回复
楼上版主的理解是正确的,确实和数据库没关系,就是需要这样一个函数 function fixedRand($minId=1,$maxId=100,$key) { } 函数内要求实现通过key返回1-100之间三个不重复的数字,但有个要求是如果输入相同的key产生的三个随机数必须是一样的。
xuzuning 2017-09-14
  • 打赏
  • 举报
回复
既然 1(下限) 和 100(上限)是作为参数传递的,且是书写 php 函数,那么就和数据库没什么关系了 随机数发生器在同一周期内是不会重复的 相同的随机数种子,将得到相同的随机数序列

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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