這是一個編程問題,需要一些思考,並且可以真正應用於任何編程語言。將四捨五入的值累加到所需的產品上
假設你有數組:
$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);
}
但沒有工作...我認爲這是雖然越來越接近。
你的問題是?錯誤在哪裏?你卡在哪裏? – 2013-03-28 05:39:14
爲什麼不循環兩次?這是O(n),沒什麼大不了的。 – 2013-03-28 05:39:35
@YogeshSuthar我不確定從最後的foreach循環到哪裏,並想看看你們是否有任何想法。 – hellohellosharp 2013-03-28 05:44:27