生成的5位不重复整数和生成的5位相邻不重复整数的代码,这个不会,谁会,麻烦告诉我一下,谢谢了

解决方案 »

  1.   

    写个伪代码:number = rand(10000-99999)while(true)
    if(in_array( number, isExistArray())
    {
    number = rand(10000-99999)
    }
    else
    {
    isExistArray[] = number;
    break;
    }print_r(isExistArray);
      

  2.   


    $arr1 =  array();
    $arr2 =  array();
    $count = 5;//个数$numbers = range (0,10);//[0,10]
    shuffle ($numbers);
    $arr1 = array_slice($numbers,0,$count);print "<pre>";
    print_r($arr1);//输出组1$seed = rand(0,100);//[0,100]
    for($j=0;$j<$count;++$j){
    $arr2[$j] = $seed++;//相邻是不会重复的,如有区间限制,此处需处理,例如超过100
    }
    print_r($arr2);//输出组2Array
    (
        [0] => 0
        [1] => 1
        [2] => 5
        [3] => 7
        [4] => 3
    )
    Array
    (
        [0] => 16
        [1] => 17
        [2] => 18
        [3] => 19
        [4] => 20
    )
      

  3.   

    楼主franzhong你说的方法可以产生一个没有重复的5位数,但是你的这个5位数的第一个数字有可能是0,有什么方法是产生第一个数字不是0。而产生一个相邻的数字不能相等的5位数,你将它当作是产生5个不相等的数字处理了,很谢谢你的答案,对我有用。
      

  4.   

    楼主franzhong你说的方法可以产生一个没有重复的5位数,但是你的这个5位数的第一个数字有可能是0,有什么方法是产生第一个数字不是0。而产生一个相邻的数字不能相等的5位数,你将它当作是产生5个不相等的数字处理了,很谢谢你的答案,对我有用。
      

  5.   

    rand(10000, 99999)php 的随机数发生器的周期为 pow(2, 15) ,所以你一次性在循环中产生的随机数个数小于 32768
     时,是不会出现重复的
    但超过周期时或多次运行生成程序时就不能保证唯一了。你需要缓存结果并检查重复只取相邻不重复整数时只需过滤含有相邻重复的结果就行了
    do {
      $num = rand(10000, 99999);
    while(preg_match('/(\d)\\1/', $num));
      

  6.   

    上面那个楼主说:生成时候后0改为1不就不会有0了,这句话说的不对了啊,你改1了,那么后面的4位数如果有1的话,那就是1重复,而且你将0改1,这个不是太符合随机生成,有一点点人为性了。现在又遇到一个问题,就是最后输出是
    Array
    (
        [0] => 0
        [1] => 9
        [2] => 8
        [3] => 6
        [4] => 3
    )
    我需要的是一个5位数,比如50721,老师给我的题目是时间+随机5位数,时间可以用date(),5位数这个怎么解决呢?谢谢大家了啊
      

  7.   

    呵呵,楼主是指提问者.其它都是楼上,说第几楼或粘贴名字就对了."老师给我的题目是时间+随机5位数."这样的话,你根本不用考虑随机数是什么.
    uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID。
    再加上一个任意的随机数,这个加应该是字串连接吧,这样两者相加的结果,已经能保证唯一性了.不需要检测.