2018-03-28 一个小问题的算法

2018-03-14  本文已影响0人  SGWoodEgg

今天在朋友圈看到一个问题:
有个东西他的期限只有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
上一篇 下一篇

猜你喜欢

热点阅读