今天挺郁悶的,做了幾道都沒啥結果,有點氣餒了。
想想為了將來還是繼續努力吧。。。碰到一道水題,氣都撒這上了
解不等式
(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);
}
}

想想為了將來還是繼續努力吧。。。碰到一道水題,氣都撒這上了
解不等式
(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































