简单的数学题
我们都知道,n个正数的和最小就是\sum^{n}_{i=1}i = \frac{n(n+1)}{2},所以答案就是\sqrt{2n}。
但是若出现像2\times{2} = 4是平方数,\sqrt{4} = 2,而实际答案却是1,我们需要将答案-1,简单来说就是设m = \sqrt{2n},若\frac{m(m+1)}{2}\gt{n}则m--
。
因为是Special Judge
,所以前n-1个小朋友分别拿1~n-1颗糖,最后一个小朋友分n-\sum^{m-1}_{i=1}i = n-\frac{m(m-1)}{2} = \text{...},其实直接循环输出,在过程中把n减掉就行了
注意特判n = 1时的情况
代码:
#include<stdio.h>
#include<cmath> //根号头文件
int n,m;
int main()
{
scanf("%d",&n);
if(n==1) //特判n=1时
{
printf("1\n1\n");
return 0;
}
m=sqrt(2.0*n); //计算m
if((m*(m+1)>>1)>n) --m; //如上文所说
printf("%d\n",m); //先输出小孩个数
for(register int i=1;i<m;++i) //循环输出糖果数,注意循环m-1次
{
printf("%d ",i);
n-=i; //记得减去
}
printf("%d\n",n); //最后输出剩下的糖果数n
return 0;
}