根据题意,很容易得知要使得它们的最大值最小,就要从最小的 \(1\) 开始用。转化一下题意,不难发现,我们只需求出最小的 \(k\),使得
\[\ \sum_{i=1}^k i\ \ge n \]于是思路便产生了:对 \(1\),\(2\),\(3\),⋯\(k\) 求和,直到上述式子成立。可以很容易地看出来一个规律:
\[( \ \sum_{i=1}^k i\ ) - n<k+1 \]根据这个规律,我们知道多出来的那一部分就存在于 \(1-k\) 当中,所以输出时判断是否为多出来的那个数就可以了。
代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n,t=0,k=0;
cin>>n;
for(int i=1;k<n;i++)
t++,k+=i;
k=k-n;
for(int i=1;i<=t;i++)
if(i!=k)
cout<<i<<endl;
return 0;
}
标签:include,题意,int,sum,codefestival,2016,final
From: https://www.cnblogs.com/-lilong-/p/17976797