24h購物| | PChome| 登入
2009-12-06 11:10:33| 人氣1,231| 回應0 | 上一篇 | 下一篇

重複排列 (修正版)

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

改用字串輸出  速度砍半!

/**********************************************************/

#include<stdio.h>  
#include<stdlib.h>  
int num[100],n,sum,a;
char line[100]={0};  
void make (int k)  
{  
  int a;  
  if(k>=sum)  
    {  
        puts(line);
        return;  
    }  
  else 
      for(a='1';a<=n;a++)  
        if(num[a]>0)  
          {  
            num[a]--;  
            line[k]=a;
            make(k+1);  
            num[a]++;  
          }  
}
main()  
{  
 while(scanf("%d",&n)==1)  
    {  
    sum=0;  
    for(a=1;a<=n;a++)     
      {scanf("%d",&num[a+'0']);sum=sum+num[a+'0'];}
     line[sum]='\0';
     n+='0'; 
     make (0);  
    }    
 return 0;     
}

台長: 來源不明

您可能對以下文章有興趣

人氣(1,231) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ZeroJudge 基礎+原創題庫 |
此分類下一篇:a+b??
此分類上一篇:老Z的题

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