清晨!来村口溜溜!
很久没那么早起床了,今早居然给尿床给弄醒!来村口溜达一下,伸伸...
- 娱乐乐园,
作者 jhtpersonal 发布于 2003-09-00 分类:php基础编程
要求:设置一个平均数A(正整数1到9),然后随机从1到9选择N次(不需要选择太多次数,比如1到1000次),使得这N个数的平均值为A
程序要求:
不能采用递归;
不能采用耗时太大的循环;
效率越高越好,要能在很短时间内完成(比如2秒左右,越短越好)
方法不需要太死,灵活变通点都行!
谢谢,急用,等待ing……
逛论坛交流:论坛的大虾们,帮忙解决一下算法问题吧???
我刚洗澡是想了想。。。没想到很完美的方法。。。需要牺牲一定的随机性
不能用递归够讨厌。。。

可以啊,只要大概能行就好了!
不必太严格!!!
哦,那好,我试试。。。。
蛮有意思的算法~
递归的话如果占资源少、速度快,效率高也可以啊
不。。。尽量不用
[php]
<?php
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$time_start = getmicrotime();
$A = 6;
$N = 20;
$num = array();
for ($i=0; $i<$N; $i++) {
do {
$num[$i] = rand(1, 9);
} while (((array_sum($num) + $N - $i - 1) > $A * $N) || ((array_sum($num) + ($N - $i - 1) * 9) < $A * $N));
}
foreach ($num as $key => $thenum) {
echo $key.". ".$thenum."
";
}
echo $N. "个数总共之和为: ".array_sum($num)."
";
$time_end = getmicrotime();
echo "耗时 ".round($time_end - $time_start, 5). "秒";
?>
[/php]
你先看看。。。效率不能说有多好。但是你这个问题里面本身存在一个不可调和的矛盾
$A为平均数,$N为个数。
自己机器上测试耗时比较多,服务器上测试马马虎虎:
http://be10.ods.org/knighte/test.php
什么不可调和的矛盾?
10 条回复
回复