void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

给出一个数,要求分拆成最多的数的和,并且每一个数都不同...

既然要求最多并且不同,那就尽量要连续给出,并且把剩余的数依次给最后的几个数上每次加一,得到序列即可

1 #include<stdio.h>
2  int main()
3 {
4 int n,arr[1001],i,j,t;
5
6 while(scanf("%d",&t)!=EOF){
7 while(t--)
8 {
9 scanf("%d",&n);
10 int wei=0,c=2;
11 while(1)
12 {
13 if(n<c)break;
14 arr[wei]=c;
15 wei++;
16 n=n-c;
17 c++;
18 }
19 c=n;
20 while(c)
21 {
22 for(i=wei-1;i>=0;i--)
23 {
24 arr[i]++;
25 c--;
26 if(c==0)break;
27 }
28 }
29 for(i=0;i<wei;i++)
30 {
31 if(i==0)
32 {
33 printf("%d",arr[i]);
34 }
35 else
36 {
37 printf(" %d",arr[i]);
38 }
39
40 }
41 printf("\n");
42 if(t)printf("\n");
43 }}
44 return 0;
45 }
posted on 2011-04-15 22:25  void-man  阅读(181)  评论(0)    收藏  举报