ACM 668 Parliament
此方法由阿飆同學提供
2+3+4+5...+N如果超過的話在倒著加回去
例如8
2+3+4超過8
2+3 (2+3+?==8 ?=3)
(0+1)+(2+1)+(3+1) = 1 + 3 + 4
此時發現1不可存在 把1丟到最後面去 變成 3 + 5
/************************************************************/
#include<stdio.h>
#include<stdlib.h>
main()
{
int n,m,a,b;
while(scanf("%d",&n)==1)
{
while(n--)
{
int temp=0,ans[50]={0},temp2;
scanf("%d",&m);
for(a=2,b=1;a<=m;a++,b++)
{
temp=temp+a;
temp2=a;
if(temp==m) {ans[b]=a;break;}
if(temp>m) break;
ans[b]=a;
}
if(temp==m)
{
for(a=1;a<=b;a++)
printf("%d ",ans[a]);
printf("\n");
}
else
{
int top=b-1;
temp=temp-m;
temp2-=temp;
for(a=b-1;a>=b-temp2;a--)
ans[a]++;
if(ans[0]==1) ans[top]++;
for(a=1;a<b;a++)
printf("%d ",ans[a]);
printf("\n");
}
}
}
return 0;
}