php生成三个数字并且任意两个不重复
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php生成三个数字并且任意两个不重复相关的知识,希望对你有一定的参考价值。
1 2 3 4 5 6 7 8 这八个数字,3个为一个组合
如:123 145 167 246 257 347 568
注意这里的每一组数字里面任何两个数字都不一样。
怎么用php实现,感觉太难了·····弄了几个小时没写出来,求好心人帮忙!
这里的不一样是这个意思,如:123 145 167这三组数中12 13 23,14 15 45,16 17 67任意两个数字,都不是重复的。
最后的结果就是:123 145 167 246 257 347 568这几组数字,里面任何一组的两个数字的组合都和其他组里的数字不重复。
$check = $list = array();
$end = 41;
for ($i = 1; $i < $end; $i++)
for ($j = $i + 1; $j < $end; $j++)
if ( ! empty($check[$i][$j]) OR ! empty($check[$j][$i])) continue;
for ($k = $j + 1; $k < $end; $k++)
if ( ! empty($check[$i][$k]) OR ! empty($check[$k][$i]) OR ! empty($check[$j][$k]) OR ! empty($check[$k][$j])) continue;
$check[$i][$j] = $check[$i][$k] = $check[$j][$i] = $check[$j][$k] = $check[$k][$i] = $check[$k][$j] = 1;
$list[] = $i.'_'.$j.'_'.$k;
break;
print_r($list);本回答被提问者采纳 参考技术B <?php
$arr = array(1,2,3,4,5,6,7,8);
$str = "";
for($i=0;$i<3;$i++)
$index = rand(0,count($arr)-1);
while(!isset($arr[$index]))
$index = rand(0,count($arr)-1);
$str.=$arr[$index];
unset($arr[$index]);
echo $str;
?>
//如果不是这个意思再补充提问,我继续帮你弄追问
不对,需要先生成全部的组合,然后再排除任意两个数的组合在其他数中有的。请看补充说明。
追答三个一组 请问一次要生成几组 还是把所有的可能都显示出来
追问需要满足所有的条件,生成全部的然后把每组里面的数字任意两个组合后,排除和其他的组里有重复的。
追答按照你这样的需求就没有固定的结果了。
我有时间帮你写一下。
谢谢啊!
追答请问 123 和321 是否算一个 还是这两个数可以同时在结果里。
追问算一个了。谢谢啊!下面的朋友的解决了!
参考技术C 没理解到你这个所谓的不一样是什么意思!生成多个不重复的随机数字php
这个没什么好废话的;直奔主题来说思路;
首先是要用mt_rand()函数生成指定个数的随机数字;
然后使用array_unique()函数去重;
因为去重了;所以得到的数字就不够指定个数了;
所以;核心是要用while循环;直到得到指定个数的数字;
到这里基本可以是结束了;
对于追求完美的人来说;还可以再用个sort();
目的不是要用来排序;主要是将得到的数组key格式化;
用代码来说话;就如下;
/** * 生成不重复的随机数 * @param int $start 需要生成的数字开始范围 * @param int $end 结束范围 * @param int $length 需要生成的随机数个数 * @return array 生成的随机数 */ function get_rand_number($start=1,$end=10,$length=4){ $connt=0; $temp=array(); while($connt<$length){ $temp[]=mt_rand($start,$end); $data=array_unique($temp); $connt=count($data); } sort($data); return $data; }
当然;重点不是这个函数;重点是这个函数的思路;可以解决很多类似的问题;
以上是关于php生成三个数字并且任意两个不重复的主要内容,如果未能解决你的问题,请参考以下文章
php生成随机数字,范围1-100,每次生成一个数字,可以重复