今天在朋友圈看到一个问题:
有个东西他的期限只有30天 然后你只有180块钱 去买这个东西之后你每天能领十块钱.等到你18天之后你又可以买这个东西买了之后你又可以每天领十块钱。如此累计要多久自己的手上才能有八个这样的东西.(注意每个东西期限只有30天)
我想了一下似乎可以用计算机解决,然后就自己用算法实现了一下,用到了循环和容器
代码如下
int money = 180;//初始钱
vector<int> product;//购买产品的容器
int day = 0;//天数
while (product.size() < 8)
{
for (vector<int>::iterator i = product.begin(); i != product.end();)
{
if (*i < 1)
{
i = product.erase(i);
}
else
{
money += 10;
(*i)--;
++i;
}
}
while (money >= 180)
{
for (int i = 0; i < money / 180; i++)
{
product.push_back(30);
}
money = money % 180;
int index = 0;
for (int leftDay : product)
{
if (leftDay == 30)
{
money += 10;
product[index]--;
}
index++;
}
}
day++;
CCLOG("%ddays have money::%d,the number of financial products is%d", day, money, product.size());
}
CCLOG("the %d days have 8 financial products", day);
根据我们输出我们可以看到第59天会得到8个;
image.png
网友评论