View Code of Problem 80

#include<stdio.h>
#include<stdlib.h>

typedef struct node {
	int data;
	struct node* next;
} Node;

void ysflb(int n) { //共有n个人参与报数
	Node* head = NULL, * p = NULL, * r = NULL;
	head = (Node *)malloc(sizeof(Node));
//创建循环链表
	head->next = NULL;
	head->data = 0;
	p = head;
	for (int i = 1; i < n; i++) {
		r = (Node*)malloc(sizeof(Node));
		r->data = i;
		r->next = NULL;
		p->next = r;
		p = r;
	}
	p->next = head;
	p = head;
	while (p->next != p) { //实现报数循环
		for (int i = 1; i < 3; i++) { //循环结束时p刚好指向需要删除的结点
			r = p;
			p = p->next;
		}
		r->next = p->next;//删除p结点
		free(p);
		p = r->next;
	}
	printf("%d\n", p->data+1);
}

int main() {
	int m;
	while (scanf("%d", &m)) {
		if (m == 0)break;
		ysflb(m);
	}
}

Double click to view unformatted code.


Back to problem 80