一、题目
Hercy 想要为购买第一辆车存钱。他 每天 都往力扣银行里存钱。
最开始,他在周一的时候存入 1 块钱。从周二到周日,他每天都比前一天多存入 1 块钱。在接下来每一个周一,他都会比 前一个周一 多存入 1 块钱。
给你 n ,请你返回在第 n 天结束的时候他在力扣银行总共存了多少块钱。
示例 1:
输入:n = 4 输出:10 解释:第 4 天后,总额为 1 + 2 + 3 + 4 = 10 。
实例2:
输入:n = 10
输出:37
解释:第 10 天后,总额为 (1 + 2 + 3 + 4 + 5 + 6 + 7) + (2 + 3 + 4) = 37 。注意到第二个星期一,Hercy 存入 2 块钱。
实例3:
输入:n = 20
输出:96
解释:第 20天后,总额为 (1 + 2 + 3 + 4 + 5 + 6 + 7) + (2 + 3 + 4 + 5+ 6 + 7+ 8)+(3 + 4 + 5 + 6 + 7 + 8 ) = 96 。注意到第三个星期一,Hercy 存入 3 块钱。
提示:
n>=1&&n<=1000
二、方法:通过对题目的分析同一个星期内存入的钱数依次递增,并且每个星期一比上星期一要多存一元。将总共存的星期数用变量a=n/7+1表示,将最后一个星期的第几天放入b=n%7表示,由此可分为两种情况。
情况一:只存一个星期
只需要用循环依次增加。代码如下:
if(a==1){
for(int i=1;i<=b;i++)
{
Money+=i;
}
}
情况二:存入超过一个星期
先求出前几个完整的星期存入的钱数,再加上最后一个星期的钱。
else{
if(a>=3){
Money=(a-1)*28;
for(int i=1;i<(a-1);i++)
{
sum+=i;
}
Money+=sum*7;
}
else{
Money=28;
}
for(int i=a;i<(a+b);i++){
Money+=i;
}
}
三:完整代码
int totalMoney(int n){
int a=n/7+1;
int b=n%7;
int Money=0;
int sum=0;
if(a==1){
for(int i=1;i<=b;i++)
{
Money+=i;
}
}
else{
if(a>=3){
Money=(a-1)*28;
for(int i=1;i<(a-1);i++)
{
sum+=i;
}
Money+=sum*7;
}
else{
Money=28;
}
for(int i=a;i<(a+b);i++){
Money+=i;
}
}
return Money;
}