读书人

2155:授奖金

发布时间: 2013-10-16 11:29:46 作者: rapoo

2155:发奖金

题目描述

?

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;}

?

读书人网 >其他相关

热点推荐