队列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> #define MAXN 10000+10 int q[MAXN]; int main(int argc, char *argv[]) { int i, n, front, rear; scanf("%d", &n); for (i=0; i<n; i++) q[i] = i+1; front = 0; rear = n; while (n>0) { printf("%d ", q[front]); front++; q[rear] = q[front]; rear++; front++; n--; } return 0; } |
这段代码可以做两方面的优化:
1 2 | 队列为空: front = rear; 队列不空 front < rear i++ 的优化 |
卡片游戏优化后的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> #define MAXN 10000+10 int q[MAXN]; int main(int argc, char *argv[]) { int i, n, front, rear; scanf("%d", &n); for (i=0; i<n; i++) q[i] = i+1; front = 0; rear = n; while (front<rear) { printf("%d ", q[front++]); q[rear++] = q[front++]; } return 0; } |
使用C++来实现
C++的模板如下:
1 2 3 4 5 6 7 8 9 | #include <cstdio> using namespace std; int main(int argc, char *argv[]) { return 0; } |
C++提供了一种更加简单的处理方式 STL 队列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <cstdio> #include <queue> using namespace std; queue<int> q; int main(int argc, char *argv[]) { int i, n; scanf("%d", &n); for (i=0; i<n; i++) q.push(i+1); while (!q.empty()) { printf("%d ", q.front()); q.pop(); q.push(q.front()); q.pop(); } return 0; } |
如何处理有n组数呢?
1 2 3 4 5 | scanf("%d", &t); while (t-->0) { } |
核心代码
1 2 3 4 5 6 7 8 9 | scanf("%d", &n); for (i=0; i<n; i++) q[i] = i+1; front = 0; rear = n; while (front<rear) { printf("%d ", q[front++]); q[rear++] = q[front++]; } printf("\n"); |
请把这两段代码合并后,再进行 C/C++代码格式化
下面的代码能够处理 t 组数据了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> #define MAXN 10000+10 int q[MAXN]; int main(int argc, char *argv[]) { int i, n, t, front, rear; scanf("%d", &t); while (t-->0) { scanf("%d", &n); for (i=0; i<n; i++) q[i] = i+1; front = 0; rear = n; while (front<rear) { printf("%d ", q[front++]); q[rear++] = q[front++]; } printf("\n"); } return 0; } |
能够处理 t 组数的C++程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <cstdio> #include <queue> using namespace std; queue<int> q; int main(int argc, char *argv[]) { int i, n, t; scanf("%d", &t); while (t-->0) { scanf("%d", &n); for (i=0; i<n; i++) q.push(i+1); while (!q.empty()) { printf("%d ", q.front()); q.pop(); q.push(q.front()); q.pop(); } printf("\n"); } return 0; } |