POJ 1037 A decorative fence

#include<stdio.h>
#include<string.h>
char s[30];
bool flag[30];
int num;
__int64 jc[30]={1};
void init(){
    for(int i=1;i<20;i++)
        jc[i]=i*jc[i-1];
}
void solve(int n,int k){
    int i,j,t,temp;
    if(k==0) return ;
    temp=jc[k-1];
    t=(n)/temp;
    if(n%temp==0) n++;
    for(j=0,i=1;i<=num;i++)
        if(!flag[i]){
            if(j==t)
                break;
            j++;
        }
    if(i>num) i--;
    flag[i]=1;
    printf("%d ",i);
    solve((n)%temp,k-1);
}
int main()
{
    int n,N;
    init();
    scanf("%d",&N);
    while(N--){
        scanf("%d%d",&num,&n);
        memset(flag,0,sizeof(flag));
        solve(n-1,num);
        puts("");
    }
    //while(1);
    return 0;
}

先附上WA了很多次的代码,有待以后改正!!

原文地址:https://www.cnblogs.com/shihuajie/p/3043570.html