1 条题解
-
0
基于队列旋转操作的排列生成算法
#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
- 上传者