2009-12-06 11:10:33來源不明
重複排列 (修正版)
改用字串輸出 速度砍半!
/**********************************************************/
#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;
}