2018.3.24模擬賽——(2)求和
阿新 • • 發佈:2019-02-01
題目大意:
解題思路:
暴力列舉。
源程式:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int sum,maxn,n,a[100001];
void work(int x,int y)
{
int xy=y,yx=x;
while(x>=y&&y>0)
{
x-=y;
a[++sum]=y;
y--;
}
if (x>0 ) a[++sum]=x;
printf("%d\n",xy);
sort(a+1,a+sum+1);//按字典序輸出
for (int i=1;i<=sum;i++)
printf("%d\n",a[i]);//輸出
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=666*n;i++)
//列舉
if ((1+i)*i/2==n)
{
printf ("%d\n",i);
return 0;
}
else
if ((1+i)*i/2>n)
if (((1+i)*i/2-n)%2==0)//判斷
{
work(((1+i)*i/2-n)/2,i);//繼續列舉
return 0;
}
return 0;
}