题目描述
ACM俱乐部最近赚大钱了,要把n元奖金分给若干个员工(至少两个)。员工的数目可以随意指定,但是这些员工领得的奖金数额必须构成一个连续的序列。比如5个人,分别取得3,4,5,6,7元。
输入格式
输入有多组数据。
每组数据一行,包含一个正整数n(小于等于2^20)。
输出
对应每组数据,输出若干行。每种分配方法输出一行(按员工数目由多到少排序),一行内输出各员工的奖金(由少到多排序,以空格分隔),行尾也请输出一个空格。
样例输入
15
28
样例输出
1 2 3 4 5
4 5 6
7 8
1 2 3 4 5 6 7
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;
void Print(int l,int r){
for(int i=l;i<=r;i++)
printf("%d ",i);
printf("\n");
}
void solve(int x){
if(x<3)
return ;
int left=1,right=2,mid=(1+x)>>1;
int sum=left+right;
while(left<mid){
if(sum==x)
Print(left,right);
while(sum>x){
sum-=left;
left++;
if(sum==x)
Print(left,right);
}
right++;
sum+=right;
}
}
int main(){
//freopen("input.txt","r",stdin);
while(~scanf("%d",&n)){
solve(n);
}
return 0;
}