24h購物| | PChome| 登入
2009-03-28 18:51:55| 人氣569| 回應0 | 上一篇 | 下一篇

ACM 668 Parliament

推薦 0 收藏 0 轉貼0 訂閱站台

此方法由阿飆同學提供

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

台長: 來源不明
人氣(569) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
此分類下一篇:ACM 108 Maximum Sum
此分類上一篇:ACM 532 Dungeon Master

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文