这是一个需要思考的编程问题,并且可以真正应用于任何编程语言。
假设您有数组:
$arr=array(10,7,4,4,3,2,1,1,1,1,1,1);
这个数组是动态的,可以是任何一组数字。
你也有一个乘数,比方说0.6
。
目标是逐个显示每个数字,使它们相加尽可能接近总乘数。在这种情况下,数字加到 36,*0.6 得到 21.6
这是问题所在:
- 您必须对每个值进行四舍五入(仅限整数),因此您的真正目标是使数字加起来尽可能接近 22。
- 您不能使用任何函数来求解数组的总和。您只能循环一次。
最基本的尝试是
$multiplier = 0.6;
$sum=0;
foreach($arr AS $value){
$sum+=round($multiplier * $value);
}
但这不起作用,因为 1*0.6 总是四舍五入为 1。
我认为这样的事情是可能的:
$multiplier = 0.6;
$sum=0;
foreach($arr AS $value){
$real=$multiplier * $value;
$rounded=round($multiplier * $value);
$sum_rounded += $rounded;
$sum_real += $real;
//Somehow compare the two sums and break the foreach
}
我不知道从这里去哪里。你们有什么感想?
试过这个:
$sum_real=0;
$sum_round=0;
$count=0;
foreach($rows AS $arr){
$count+=1;
$real_val=$arr*$multiplier;
$sum_round+=round($real_val);
$sum_real+=$real_val;
$avg_round=$sum_round/$count;
$avg_real = $sum_real/$count;
$val = ($avg_round>$avg_real) ? floor($real_val) : round($real_val);
}
但是没有用......我认为它已经接近了。