方法一:
思路:
- 计算n天中一共经历了多少个完整的周,设为i
- 计算n天中最后一个不完整的周有多少天,设为j
- 最后的结果 = 完整周的存钱数 + 剩下天数的存钱数
- 完整周的存钱数:第一周存钱数为
(1+7)*7*i/2,然后再加上后面几个完整周与第一周的差额即可:这个不是**7*i**,因为第i周将会与第1周差(i-1)*7天,并且相邻两周差额恒等于7,符合等差数列,所以所以可以算出差额的总钱数等于(第一周差的钱数 + 第i周差的钱数)*i/2即(0 + (i-1)*7)*i/2 天 - 剩下天数的存钱数:最后一周中,第一天存入
1+i元,最后一天存入i+i+j-1元,一共j天,通过求和公式计算出最后一周的存钱数(1+i+1+i+j-1)*j/2
- 完整周的存钱数:第一周存钱数为
class Solution {public:int totalMoney(int n) {// 一共经历了多少个完整的周int i = n / 7;// 最后一个不完整的周存钱数int j = n % 7;int ret = 0;if (i > 0)// 加上完整周一共经历的存钱数 = 每个周都为第一周的存钱数 * 周数 + 差额的钱数(这个不是7*i,因为第i周将会与第1周差(i-1)*7天,所以可以算出相差(0 + (i-1))*7*i/2 的金钱)ret += (1+7)*7*i/2 + 7*(i-1)*i/2;// 加上最后一周的存钱数ret += (1+i+1+i+j-1)*j/2;// 总金钱 = 完整周的钱 + 最后剩余的几天赚的钱return ret;}};
