Подсчитайте, сколько дней это займет, используя цикл while - PullRequest
0 голосов
/ 16 апреля 2019

Человек собрал 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 голосов
/ 16 апреля 2019

Я прошу прощения заранее, потому что я все еще активно изучаю C ++, но думаю, что смогу воспроизвести желаемый результат в 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 ++.

0 голосов
/ 16 апреля 2019

Вы не можете кодировать, если сначала не решите проблему логически.В вашем случае ключом к решению является помнить, что каждый день количество возвращаемых сумок будет вдвое больше, чем в прошлый день.Итак, вот самое простое решение, которое я могу себе представить:

#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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...