在这里插入图片描述解题思路:
这道题本质是寻找其数学规律,首先计算好第一周的总存款,然后用前缀和的方法计算第一周到周几的总存款,便于后序操作。然后计算周数,以及最后余几天,由于每周存钱规律满足等差数列,所以利用等差数列求和公式可以直接得到达到整数周完整的存款,剩下的空余天再根据我们计算好的前缀和加上随着周数变化增加的存款,代码如下:

class Solution {
public:
    int totalMoney(int n) {
        int save = 28;
        int days[7] = {1, 3, 6, 10, 15, 21, 28};
        int num = n / 7;
        int rest = n % 7;
        return rest == 0 ? num * save + (num * (num - 1)) * 7 / 2 : num * save + (num * (num - 1)) * 7 / 2 + days[rest - 1] + num * rest;
    }
};

更多推荐