发布于 1970-01-01 08:00
  • 14 个回答
    • 上午就看到这个问题了,一直没有回答。现在突然发现,这是个好问题。

      就好比问:从 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);
      }
      
      2022-12-01 20:27 回答
    • 感觉一行代码就好了啊,数学分析下就行。
      只是针对这个题目而言,没有考虑到所有情况。

      <?php
      $a = 36;//买水数
      $b = 3;//赠送条件
      //$x + $x/$b = $a;
      //$x*((1+$b)/$b)=$a;
      
      $x = $a*$b/(1+$b);
      
      echo $x;//27
      
      2022-12-01 20:27 回答
    • 36/(3+1)*3 = 27

      2022-12-01 20:27 回答
    • PHPfunction mathBuy($total, $range = 3)
      {
          $remainder = $total % ($range + 1);
          $quotient = round($total / ($range + 1), 0);
          return $quotient * $range + $remainder;
      }
      

      P.S.题主说答案是24瓶,我有点费解 = =

      2022-12-01 20:27 回答
    • 手机码字,有点乱 题主你这个代码逻辑是错的。 举个栗子: 假如总共买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;
      }
      
      2022-12-01 20:27 回答
    • 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

      2022-12-01 20:27 回答
    • 大家都在用数学算法,我就给一很土的办法,按照机器的思维来判断

      这个程序的逻辑就是,每次都买一瓶,然后看看手里的水有多少瓶,当水的数量和人的数量相等的时候就可以回家了

      <?php
      
      function waterBuy($people, $range)
      {
          $water = 0;     //目前拥有的水
          $buySum = 0;    //购买的数量
          $rm = 0;        //活动临时储存变量
          while ($water != $people) {
              $buySum++;
              $water++;
              $rm++;
              if ($rm == $range) {
                  $water++;
                  $rm = 0;
              }
          }
          return $buySum;
      }
      
      echo waterBuy(36, 3);
      2022-12-01 20:27 回答
    • 一元一次方程,水的单价为1,需要的支付为x,每支付3可以获得4瓶水,所以

      $$ x * {4 / 3} = 36 $$

      求得x为27

      2022-12-01 20:27 回答
    • 楼主大概是想说:每三个空瓶子可以再换一瓶满的吧?

      2022-12-01 20:27 回答
    • php是世界上最好的语言,没有之一

      2022-12-01 20:27 回答
    • 我也贴一个非数学题的方法,每买3瓶送1瓶,当买的和送的加一块等于36就好了 function buyWater($people,$free) { $a = ''; for ($i = 1; $i <= $people ; $i++) { if($i % $free === 0) $a[] = $i; if(count($a) + $i === $people) break; } $b = count($a); return $people $b; } print_r(buyWater(36,3));
      2022-12-01 20:27 回答
    • function buyWater($people,$free) { $a = ''; for ($i=1; $i <=$people ; $i++) { if($i%$free === 0) $a[] = $i; if(count($a) + $i === $people) break; } $b = count($a); return $people $b; } print_r(buyWater(36,3));
      2022-12-01 20:27 回答
    • 设 人数为 total  购买赠送为 range  至少购买数量为X  方程式是
      X(购买的数量) + X/range(赠送的个数) = total  (总人数)

      X = totalrange/(range+1)

      function quantity($total, $range) 
      {
          return ceil($total $range / ($range + 1));
      }
      echo quantity(36,3)

      2022-12-01 20:27 回答
    • 三瓶赠一瓶的话,直接除以四向下取余乘以3,再加上对应的余数;;

      但是感觉应该问的是三个空瓶子换一瓶水

      2022-12-01 20:27 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有