今天挺郁悶的,做了幾道都沒啥結果,有點氣餒了。
想想為了將來還是繼續努力吧。。。碰到一道水題,氣都撒這上了

解不等式
 (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);
    }

}