1 条题解

  • 0
    @ 2025-5-25 15:35:11

    基于队列旋转操作的排列生成算法

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAXN 100
    
    int qu[MAXN];
    
    int main(){
        int T, n, i, front, rear, j;
        scanf("%d", &T);
    
        while(T--){
            scanf("%d", &n);
            front = rear = 0;
            qu[rear++] = n;
            for(i=n-1; i>=1; i--){
                front--;
                front = (front+MAXN)%MAXN;
                qu[front] = i;
                for(j=0; j<i; j++){
                    rear--;
                    rear = (rear+MAXN) % MAXN;
                    front--;
                    front = (front+MAXN) % MAXN;
                    qu[front] = qu[rear];
    
                }
            }
            for(i=front; i != rear; i = (i+1)%MAXN){
                if(i == front) printf("%d", qu[i]);
                else printf(" %d", qu[i]);
            }
            putchar('\n');
        }
    
        return 0;
    }
    
    • 1

    信息

    ID
    2033
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    1
    已通过
    1
    上传者