国王将金币作为工资,发放给忠诚的骑士。

题目描述

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后2天(第2天和第3天),每天收到2枚金币;之后3天(第4,5,6天),每天收到3枚金币;之后4天(第7,8,9,10天),每天收到4枚金币……这种工资发放模式会一直延续下去:当连续n天每天收到n枚金币后,骑士会在之后的连续n+1天里,每天收到n+1枚金币(n为任意正整数)。你需要编写程序,确定从第1天开始的给定天数内,骑士一共获得了多少金币。

算法思路

每日的金币获取数为1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 7…
发现规律为1个1、2个2、3个3这样,想要获取到的金币总数,那就要知道已获得的金币数,再加上当天的金币数,即可求得。
已获得的金币数通过循环实现,当天的金币数,我们可以另外定义一个当天是获取到相同金币数的第几天这个参数来辅助求得,具体代码如下:

private static int test(int n){
        int sum = 0;//总数
        int t = 1;//标记当天是获得相同金币的第几天
        int s = 1;//标记当天获得金币
        for(int i = 1;i <= n;i++){
            sum += s;
            if(t < s){//若还没到相同金币的最后一天,则记录天数+1
                t++;
            }else {//当天已是相同金币的最后一天,则天数记录初始化,第二天金币+1
                t=1;
                s++;
            }
        }
        return sum;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值