文章

79

粉丝

221

获赞

46

访问

202.1k

头像
约瑟夫环,输出各个被选中的序号,循环链表
P1081 兰州大学/湖南大学机试题
发布于2023年3月28日 10:31
阅读数 2.1k

#include <iostream>
using namespace std;
typedef struct Node {
	int data;
	struct Node* next;
}Node, * List;
int main() {
	int n, s, m;
	while (cin >> n >> s >> m) {
		if (n == 0)
			break;
		List L = new Node;
		Node* p = L, * beg = L, * begpre = L;
		for (int i = 1; i <= n; i++) {
			p->data = i;
			if (i == s - 1)
				begpre = p;
			if (i == s)
				beg = p;
			if (i == n) {
				p->next = L;
				break;
			}
			p->next = new Node;
			p = p->next;
		}
		int sum = 1;
		if (s == 1)
			begpre = p;
		while (begpre != beg) {
			sum++;
			begpre = beg;
			beg = beg->next;
			if (sum == m) {
				sum = 1;
				cout << beg->data << ",";
				begpre->next = beg->next;
				free(beg);
				beg = begpre->next;
			}
		}
		cout << beg->data << endl;
		free(beg);
	}
	return 0;
}

需要注意:

  1. begpre表示起始序号位置的前一位,用以遍历到第m个时将其后面的节点取出,所以给其赋初值时判断当前节点的值是否为s-1,而由于当前节点的值从1开始,若起始节点值设为...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发