题目:
当连续n天每天收到n枚金币后,骑士会在之后的n+1天里,每天收到n+1枚金币。
请计算在前k天里,骑士一共收获了多少枚金币。
输入:一个正整数k,表示发放金币的天数。
输出:一个正整数,即骑士收到的金币总数。
输入样例1:6,输出样例1:14;输入样例2:1000,输出样例2:29820
我的思路:
1 2 2 3 3 3 4 4 4 4...... 发现每个完整的周期都是该周期每天金币数的平方,所以关键在于找到最大应该给的金币数以及周期的个数,因此在于找到第a天所在区域内的金币数
#include<stdio.h>
#include<math.h>
int main()
{
int a;
scanf("%d",&a);
int k=0,i=1; //i是每个周期内天数(也是金币数)
long long sum=0;
for(i=1;;i++) //用于找到第k天时,所在金币相同的所有金币数之和
{
k=k+i;
if(k>a){ //找到a所在的周期
k=k-i; //到达第k天所在周期的前一天
sum=(a-k)*i; // 与第k天所在周期金币相同的所有金币数之和
break;
}
}
int j=1;
for(j=1;j<i;j++) //前面金币的总数
{
sum=sum+pow(j,2);
}
printf("%lld",sum);
return 0;
}
本人比较菜,所以如果程序有问题希望能帮忙指出一下,又看不懂的我也尽量回复吼