题目描述
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后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;
}