使用while循环计算需要多少天

时间:2019-04-16 17:32:04

标签: c++ while-loop

  

一个人在森林里收集了N袋袋子。一袋他   带回家。第二天,他邀请了一位朋友携带2   袋回家,第三天他们每个人都邀请了另一个朋友和   携带4袋回家,依此类推...计算需要多少天   将所有行李带回家。在最后一天不是全部   朋友们必须带一个袋子。

我不知道从哪里开始,只是我应该从while(N> 0)开始

while (N>0) {
    // have no idea where to start
}

到目前为止,我已经提出了这个建议:

while (n>0) {
    n=n-1;
    if (n!=0) {
       sum++;
    }
 }

2 个答案:

答案 0 :(得分:0)

如果您没有先从逻辑上解决问题,则无法进行编码。对于您而言,解决方案的关键是要记住,每天回家的行李数量将是前一天的两倍。所以这是我能想到的最简单的解决方案:

#include <iostream>

int main() {

   int N, days = 0;

   std::cin >> N;

   for ( int i = 1; N > 0; N -= i, i *= 2, ++days );

   std::cout << days;

   return 0;
}

因此,for确实可以解决问题。从N包和i朋友开始的第一天开始。每天(迭代)都带回i包,然后将朋友加倍,直到所有包都回家(N> 0)。

答案 1 :(得分:0)

我很抱歉,因为我仍在积极学习C ++,但我认为我可以在while循环中用PHP再现所需的输出。据我所知,您需要的公式是 n = n-i ,其中 i 是每天加倍的迭代器,而 n 是行李数...

  $n = 10; // number of bags gathered
  $i = 1; // iterator for day 1
  $days = array($n); // create an array to help keep track of the days
  $n = $n - $i; // day 1 has to be done outside the loop
  array_unshift($days, $n); // prepend new n value to array

  // while loop
  while ($n > 0) {
    $i = ($i * 2); // double the iterator each day (run)
    $n = $n - $i;
    if ($n > 0) {
      array_unshift($days, $n); // prepend each new n value to array
    }
  }
  // count each item in the array
  echo $numberOfDays = count($days); // outputs 4

在笔和纸上用少量数字检查了几次,每次都正确。我假设可以将相同的概念应用于C ++。