题目:
有36个人去游玩,需要买水,商店活动买3瓶赠送一瓶。
请问题目至少需要买多少瓶饮料才可以人手一瓶?
程序:
function mathBuy($total, $range = 3)
{
$buy = $i = 0;
while ($total > 0) {
$total--;
$i++;
if ($i % $range == 0) {
$i = 0;
} else {
$buy++;
}
}
return $buy;
}
答案:
var_dump(mathBuy(36, 3)); // 计算结果24瓶,正确答案是27
求简洁的正确算法。
回复内容:
题目:
有36个人去游玩,需要买水,商店活动买3瓶赠送一瓶。
请问题目至少需要买多少瓶饮料才可以人手一瓶?
程序:
function mathBuy($total, $range = 3)
{
$buy = $i = 0;
while ($total > 0) {
$total--;
$i++;
if ($i % $range == 0) {
$i = 0;
} else {
$buy++;
}
}
return $buy;
}
答案:
var_dump(mathBuy(36, 3)); // 计算结果24瓶,正确答案是27
求简洁的正确算法。
上午就看到这个问题了,一直没有回答。现在突然发现,这是个好问题。
就好比问:从 1 累加到 n,和是多少?
老师之所以教我们 for(i=1;i<=n;i++) sum+=i; 是为了教我们 for 循环的写法,而不是为了求1到n的累加和。我们遇到这种问题时,应该写 n*(n+1)/2。
所以:
phpfunction mathBuy($total, $range = 3)
{
return $total/($range+1)*$range;
}
谢谢 @Yian 的回复。修改一下。对于小数,需要向上取整。
phpfunction mathBuy($total, $range = 3)
{
return ceil($total/($range+1)*$range);
}
感觉一行代码就好了啊,数学分析下就行。
只是针对这个题目而言,没有考虑到所有情况。
36/(3+1)*3 = 27
PHPfunction mathBuy($total, $range = 3)
{
$remainder = $total % ($range + 1);
$quotient = round($total / ($range + 1), 0);
return $quotient * $range + $remainder;
}
P.S.题主说答案是24瓶,我有点费解 = =
手机码字,有点乱
题主你这个代码逻辑是错的。
举个栗子:
假如总共买4瓶水。走一下你的while逻辑
第一轮
total 3 i 1 buy 1
第二轮
total 2 i 2 buy 2
第三轮
total 1 i 0 buy 2 这里出错
第四轮
total 0 i 1 buy 3
买4瓶水看样子结果是正确的。但是由于你的逻辑错了,在第三次买水的时候就不需要掏钱了。你再理解理解。
对了,我是从你的程序员如何提高逻辑思维能力过来的。
改正
function mathBuy($total, $range = 3)
{
$buy = $i = 0;
while ($total > 0) {
$total--;
$i++;
if ($i % ($range+1) == 0) {
$i = 0;
} else {
$buy++;
}
}
return $buy;
}
x + x/3 = 36
=> 4x/3 = 36
推广开还可以这样
function quantity($total, $present)
{
return ceil($total * $present / ($present + 1));
}
total为需要的总数,present买几瓶送一瓶,返回值便是,需要最少需要买多少瓶,ceil是当出现小数时强取整.
运行结果
$total : 36, $present: 3 => 27
$total : 76, $present: 4 => 61
$total : 105, $present: 5 => 88
大家都在用数学算法,我就给一很土的办法,按照机器的思维来判断
这个程序的逻辑就是,每次都买一瓶,然后看看手里的水有多少瓶,当水的数量和人的数量相等的时候就可以回家了
一元一次方程,水的单价为1,需要的支付为x,每支付3可以获得4瓶水,所以
$$ x * {4 / 3} = 36 $$
求得x为27
楼主大概是想说:每三个空瓶子可以再换一瓶满的吧?
php是世界上最好的语言,没有之一
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉
本文系统来源:php中文网