我需要一些帮助来解决这个算法问题,如何一个人在他的城市中受欢迎。
我的情况
算法应该如何工作 如果一个人“标记”在他的城市中有500个朋友,那就是500,000。
(500/500,000)*50,000 = 5
所以5
人50,000
知道他是对的。
但是当朋友数量增加时,50,000人应该减少
如果“sam”有1000个朋友,那么
(1000/500,000)*25000 = 5
5
人25000
知道他的名字
是的,我们可以在if/else
条件下实现此功能
如果是这样,那么我必须写500行代码。
还有另一种方法可以在PHP中执行此操作吗?
<?php
$totalfriends = 100;
$totali = 5000000;
$name = "Sam";
if ($totalfriends >= 100 && $totalfriends <= 499 ) {
$r = ($totalfriends/$totali)*50000;
echo round($r),' ',"in 50K People on City regonize this Profile";
}else if ($totalfriends >= 500 && $totalfriends <= 999) {
$r = ($totalfriends/$totali)*25000;
echo round($r),' ',"in 25K People on City know".$name;
}else{
echo "";
}
?>
答案 0 :(得分:1)
这就是你要找的东西吗?
foreach([100, 500, 543, 1000, 5000, 51000, 500000] as $my_friends)
echo '5 in '. getScoreOf($my_friends) . "<br>";
function getScoreOf($my_friends){
$of = 5;
$total = 5e5; //that's 500,000 ;)
$step = 100; //minimum step, so output is not "4604" but "4600"
$out_of = $total / $my_friends * $of;
return $out_of > $step? round($out_of / $step) * $step: round($out_of);
}
编辑:解决方案与原始代码合并
<?php
$of = 5;
$totalfriends = 100;
$name = "Sam";
echo $of ." in ". getScoreOf($of, $totalfriends) ." people in city know ". $name;
function getScoreOf($of, $my_friends){
$total = 5e6; //that's 5,000,000 ;)
$step = 100; //minimum step, so output is not "4604" but "4600"
$out_of = $total / $my_friends * $of;
return $out_of > $step? round($out_of / $step) * $step: round($out_of);
}