LeetCode 1716.计算力扣银行的钱【c】

一、题目

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;
}

hello1024world - 力扣(LeetCode) (leetcode-cn.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值