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. 起初想着是用规律模拟,但是没找到,然后又想通过定偏移量去模拟出队的情况,也不是很理想,所以想着用暴力法直接求解。
posted @ 2023-11-28 00:42  彭乐祥  阅读(19)  评论(0编辑  收藏  举报