一、题目描述

二、解题思路

整体思路

可以采用模拟的方法来解决这个问题,将整周存钱量不足一周的存钱量分开计算,最后求二者的总和,即为所求。

具体思路

(1)变量sum用于记录存钱的总数;

(2)首先,我们需要计算整周存钱量;

<1>week表示存够整周的周数,week=n/7;

<2>通过观察示例3我们可以知道,第一周存钱总数为(1+2+......+7)=28元,第二周比第一周多存7元,第三周比第二周多存7月,即第三周比第一周多存7*2元,所以可以得出规律:第i周存钱的钱数=28+(i-1)*7;

<3>所以,由等差数列求和可以算出:

week周存钱的总数为:28*week+(1+2+.....+week-1)*7=week*28+(week-1)*week*7/2;

(3)然后,我们记录不足一周的存钱量;

<1>首先,计算不足一周的天数day,day=n%7;

<2>循环计算不足一周的总钱数,第一天的钱数为week+1,依次递增+1,直到day天累加完,循环结束;

(4)最后,返回sum即为要求的总钱数;

三、代码实现

class Solution {
public:
    int totalMoney(int n) {
        int sum=0;
        //1.计算整周存钱
        int week=n/7;
        sum+=(week*28+(week-1)*week*7/2);

        //2.计算非整周存钱
        int day=n%7;
        for(int i=week+1;i<=week+day;i++)
            sum+=i;

        return sum;
    }
};

更多推荐