一个人在森林里收集了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++;
}
}
答案 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 ++。