题目描述
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。
请计算在前K天里,骑士一共获得了多少金币。
输入
只有1行,包含一个正整数K,表示发放金币的天数。
输出
只有1行,包含一个正整数,即骑士收到的金币数。
输入样例复制
【输入样例1】 6 【输入样例2】 1000
输出样例复制
【输出样例1】 14 【输出样例2】 29820
#include<bits/stdc++.h> using namespace std; int n,k,ans; int main() { cin>>n; for(int i=1;i<=n;i++) { if(n==1) { cout<<1; return 0; } k+=i; if(k>n) { k-=i; for(int g=1;g<=i-1;g++) ans+=g*g; ans+=(n-k)*i; cout<<ans; return 0; } } return 0; }
这题不难。。。我觉得只要想到思路就好
我这人做题就喜欢开变量
核心:
k-=i; for(int g=1;g<=i-1;g++) ans+=g*g; ans+=(n-k)*i; cout<<ans; return 0;当加的天数大于n时,减去最后那组天数,ans加到前一组天数的平方(金币数),再加去n与k之间乘那组天数每天该领的金币就OK了(胎教级教学)
tips:一开始1没有特判90分
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b=0,ans=0,i,test1=0,test2=0;
cin>>a;
b=a;
for(int i=1;i<=a+1;i++)
{
if(b>=i)
{
// cout<<i<<" ";
ans+=i*i;
b-=i;
test1+=i;
if(test2<=i)
{
test2=i;
}
}
}
if(b>test1)
{
b-=test1;
}
// cout<<b;
// cout<<ans<<b;
// cout<<test1<<endl;
cout<<ans+((a-test1)*(test2+1));
}