程序实现0到9十个数字中选四个不相同的数字随机排列的算法问题,求指教修改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序实现0到9十个数字中选四个不相同的数字随机排列的算法问题,求指教修改相关的知识,希望对你有一定的参考价值。

程序如下:
<?php
$num1=9;
$arr[0]=rand(0,$num1);
for($a=1;$a<=3;$a++)

for($b=0;$b<$a;)

$c=rand(0,$num1);
if($arr[$b]!=$c)

$b=$b+1;

else
$b=0;

$arr[$a]=$c;

for($p=0;$p<=3;$p++)

echo $arr[$p];

?>
这个程序运行出来的结果数字中还是有重复的现象,请各位帮我找一下这个程序算法哪里出了问题,谢谢

不需要弄得这么复杂。

<?php
    $min = 0;
    $max = 9;
    $num = 4;
    $baseArray = range($min,$max);              //组成0-9的数组
    shuffle($baseArray);                        //打乱数组
    $output = array_slice($baseArray,0,$num);   //截取前面4个字符作为结果
       
    echo \'<pre>\';
    print_r($output);
//End_php追问

我的程序牵涉到数据库的单独条目,要得到一个数组才行

追答

@incNick 的程序用法说明

<?php
$baseArray = range(3,9);
echo \'<pre>\';
echo \'原始数组:<br/>\';
print_r($baseArray);
echo \'<br/>\';
$array_keys = array_rand($baseArray, 4);
echo \'这里是key,不是值。<br/>\';
print_r($array_keys);
echo \'<br/>\';
echo \'这个才是随机结果。<br/>\';
foreach($array_keys as $key)
    echo \'$baseArray[\'.$key.\'] = \'.$baseArray[$key].\'<br/>\';

/*
//下面是输出结果
原始数组:
Array
(
    [0] => 3
    [1] => 4
    [2] => 5
    [3] => 6
    [4] => 7
    [5] => 8
    [6] => 9
)
这里是key,不是值。
Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 6
)
这个才是随机结果。
$baseArray[0] = 3
$baseArray[1] = 4
$baseArray[2] = 5
$baseArray[6] = 9
*/
?>
参考技术A 直接改掉吧,这句话就够了
print_r(array_rand(range(0,9), 4));追问

我的程序牵涉到数据库的单独条目,要得到一个数组才行

追答

得到的就是数组,不然我就echo出来了
注意,array_rand返回的数组是键名,因此如果你的取值范围不是0-9的话还要进行调整。

用java实现取1-100之间的99个不重复的随机数 然后输出没有被取出的数字

package cn.kgc.springtest2.demo1.dao;

import java.util.BitSet;

/**
 * @author
 * @create 2019-08-02 17:46
 **/
public class sss 
    public static void main(String[] args) 
        BitSet bs = new BitSet(100);
        for (int count = 0; count < 99;) 
            int random = (int) (Math.random() * 100);
            if (!bs.get(random)) 
                bs.set(random);
                count++;
            
        
        //输出没有被取出的数字
        System.out.println(bs.nextClearBit(0));
        System.out.println();
        for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) 
            //输出不重复的随机数
            System.out.print(i + " ");
        
    

 

以上是关于程序实现0到9十个数字中选四个不相同的数字随机排列的算法问题,求指教修改的主要内容,如果未能解决你的问题,请参考以下文章

0-9组成四位数的一共有多少组

c语言设计猜数字游戏

python 有四个数字:1234,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位十位个位的数字都是1234。组成所有的排列后再去 掉不满足条件的排列。(用

python实现从8个数字中选5个

C#如何生成随机不重复的数字

用java实现取1-100之间的99个不重复的随机数 然后输出没有被取出的数字