任何人都可以给我实现这个逻辑的想法。我知道如何生成随机数,但却没有知道如何使用至少两个唯一数字来 。
感谢,你。
适用的规则:
所有独特的。
4个独特的和2个重复的数字
3个独特的数字和3个重复的数字
2个独特的和4个重复的数字
需要用以上四个规则形成的数字
规则不适用:
1个唯一且5个重复的数字
0个唯一和6个重复数字。
用这两个规则形成的数字不是必要的
数字可以是这样的:
123456 , 33 4567, 444 567, 5555 67等。
不允许使用这些组合:
111111 222222 333333 444444 555555 666666 777777 888888 999999
122222 133333 .. .. 199999
222666 666777 等,
将此问题标记为否定且标记为重复的人可以在下面做出评论,指明其解释位置。在发布这个问题之前我进行了很多探索,但没有找到我需要的东西,所以来到这里。希望你们有人帮助我。
答案 0 :(得分:1)
Asker评论:4个唯一和2个重复数字。但他们也应该有3个独特的 和3个重复的数字,2个独特的和4个随机的重复数字 号。
好吧,我想我终于明白了,所以我调整了算法以匹配每个可能的规则,你期望从0到6唯一,虽然因为你会看到我没有改变我原来的答案代码。我甚至添加了一个排序标志,以便对int的incase进行排序,这也是一个要求。我确定!!
<?php
//
function random_number_with_dupe($len = 6, $dup = 1, $sort = false) {
if ($dup < 1) {
throw new InvalidArgumentException('Second argument is < 1');
}
$num = range(0,9);
shuffle($num);
$num = array_slice($num, 0, ($len-$dup)+1);
if ($dup > 0) {
$k = array_rand($num, 1);
for ($i=0; $i<($dup-1); $i++) {
$num[] = $num[$k];
}
}
if ($sort) {
sort($num);
}
return implode('', $num);
}
所有独特。
for ($i=0; $i<5; $i++) {
echo random_number_with_dupe(6, 1, true).PHP_EOL;
}
/*
124579
123679
013568
015789
013578
*/
4个唯一且2个重复的数字。
for ($i=0; $i<5; $i++) {
echo random_number_with_dupe(6, 2, true).PHP_EOL;
}
/*
235699
037789
034677
012249
033569
*/
3个唯一且3个重复的数字。
for ($i=0; $i<5; $i++) {
echo random_number_with_dupe(6, 3, true).PHP_EOL;
}
/*
015559
011147
111239
677789
456777
*/
2个唯一且4个重复的数字。
for ($i=0; $i<5; $i++) {
echo random_number_with_dupe(6, 4, true).PHP_EOL;
}
/*
068888
022229
018888
333378
000058
*/
1个唯一且5个重复的数字。
for ($i=0; $i<5; $i++) {
echo random_number_with_dupe(6, 5, true).PHP_EOL;
}
/*
788888
066666
799999
355555
244444
*/
0个唯一且6个重复数字。
for ($i=0; $i<5; $i++) {
echo random_number_with_dupe(6, 6, true).PHP_EOL;
}
/*
888888
333333
777777
888888
777777
*/
所有规则。
for ($i=0; $i<6; $i++) {
echo random_number_with_dupe(6, $i+1, true).PHP_EOL;
}
/*
345789
003569
245666
000089
777778
555555
*/
所有规则(随机)。
for ($i=0; $i<6; $i++) {
echo random_number_with_dupe(6, mt_rand(1, 6), true).PHP_EOL;
}
/*
225678
222222
111359
444444
777778
233349
*/
工作示例:
这个怎么样,每个数字都是唯一的。使用0到9作为熵,然后随机播放。
<?php
function random_number($len = 6) {
$num = range(0,9);
shuffle($num);
return implode('', array_slice($num, 0, $len));
}
for ($i=0; $i<10; $i++) {
echo random_number(6).PHP_EOL;
}
结果:
357964
365870
392576
285196
278915
712960
751032
517420
943257
380162
修改
Asker评论:我可以做,但要求不同。他们需要 至少2个唯一数字。 1 重复。
<?php
function random_number_with_1_dupe($len = 6) {
$num = range(0,9);
shuffle($num);
$num = array_slice($num, 0, $len-1);
$dup = array_rand($num, 1);
$num[] = $num[$dup];
return implode('', $num);
}
for ($i=0; $i<10; $i++) {
echo random_number_with_1_dupe(6).PHP_EOL;
}
564795
698756
937414
760897
706383
784626
520166
614055
798057
295809
编辑v4.0
我需要一个没有这两个规则的随机数:1个唯一且5个 重复的数字。 0个唯一和6个重复数字。适用规则 :一切都很独特。 4个唯一和2个重复数字。 3独特和3 重复的数字。 2个独特的和4个重复的数字。
第二个参数是规则,所以你要这样做:
echo random_number_with_dupe(6, mt_rand(1, 4), true).PHP_EOL;
如果你想要介于两者之间,你可以定义一个规则数组并随机选择一个。
$rules = [
1,3,5
];
echo random_number_with_dupe(6, $rules[array_rand($rules)], true);