1100金币-数学法
编辑发布:webdc 时间:2019/8/8 14:32:43 访问量:1760 评论条:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int k,N,Sx,Sn,s;
cin>>k;
N = sqrt(2*k);//sqrt(2k+1/4);
//保证k[Sn-1,Sn]的情况下 求N。
//用令Sx=Sn-1,Sn=Sn
Sx = ((N+1)*N)/2;
if(k>Sx)//如果最大层天数小于k,加一层
N++;
else
Sx-=N;
//s=((N-1)*N*(2*(N-1)+1))/6+N*(k-Sx);
//s=((N-1)*N*(2*N-1))/6+N*(k-Sx);
s=((N-1)*N*(2*N-1))/6+N*(k-Sx);
cout<<s;
return 0;
}