今天挺郁闷的,做了几道都没啥结果,有点气馁了。
想想为了将来还是继续努力吧。。。碰到一道水题,气都撒这上了

解不等式
 (for k = 1 to i)∑k = i * (i + 1) / 2 ≤ n,
 注意到i是满足上式的最小正整数,得到
 i = (√(8 * n + 1) - 1) / 2(取整数)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 于是有:
 金币数
 = (for k = 1 to i)∑k^2 + (n - i) * (i + 1)
 = (i + 1) * (6 * n - 2 * i - i^2) / 6


#include <iostream>
#include 
<string>
#include 
<vector>
#include 
<cmath>
using namespace std;

int main()
{
    
long int sum;
    
int num;
    
while (scanf("%d",&num)!=EOF)
    
{
        
if (num==0)
          
break;
        sum
=0;
        
int n=((int)(sqrt((double)(8*num+1)))-1)/2;
        
for (int j=1;j<=n;j++)
        
{
            sum
+=j*j;
        }

        sum
+=(num-n*(n+1)/2)*(n+1);
        printf(
"%ld %ld\n",num,sum);
    }

}