PTA_8-4 报数
一、题目
二、解题思路
使用数组模拟链表完成
1. 代码
#include<stdio.h>
#define N (int)1e3
int out[N];
int main() {
int ne[N]; int value[N], head = 0;
int n, m;
scanf("%d%d", &n, &m);
for (int i = 0; i <= n; i++) {
value[i] = i - 1;
ne[i] = i + 1;
if (i == n) ne[i] = 1;
}
int temp = n;
int pos = head;
while (temp--) {
int t = m - 1;
while (t--) pos = ne[pos];
int p = ne[pos];
out[value[p]] = n - temp;
ne[pos] = ne[ne[pos]];
pos = p;
}
for (int i = 0; i < n; i++)
printf("%d ", out[i]);
return 0;
}
2.结果
三、总结
1. 为了防止越界一定要使用头节点,不然,边界值会导致死循环。
2. 起初想着是用规律模拟,但是没找到,然后又想通过定偏移量去模拟出队的情况,也不是很理想,所以想着用暴力法直接求解。