题目大意:n个人围成一圈,向左向右的数数,数到匹配的就出列
解题思路:用双向链表解决
#include<cstdio>
struct People {
	People *left;
	People *right;
	int number;
};
int main() {
	int number, k , m;		
	while(1) {
		scanf("%d", &number);
		scanf("%d", &k);
		scanf("%d", &m);
		if(number == 0 && k == 0 && m ==0)
			break;
		People *first;
		People *current;
		current = new People;
		current->number = 1;
		first = current;
		People *temp;
		for(int i = 2 ; i <= number; i++) {
			temp = new People;
			temp->number = i;
			current->right = temp;
			temp->left = current;
			current = temp;	
		}
		current->right = first;
		first->left = current;
		int count = number;
		People *left = current;
		People *right = first;	
	while(count){
			for(int i = 0; i < m - 1; i++)
				left = left->left;	
			for(int i = 0; i < k - 1; i++)
				right = right->right;
			if(right->number == left->number) {
				printf("%3d", right->number);
				count--;
				if(count)
					printf(",");
			}
			else {
				printf("%3d%3d",right->number, left->number);
				count = count -2;
				if(count)
					printf(",");
			}
			if(right->right == left) {
				right->right = left->right;
				left->left = right->left;
			}
				
			left->left->right = left->right;
			left->right->left = left->left;
			right->left->right = right->right;
			right->right->left = right->left;
			right = right->right;
			left = left->left;
		}
	printf("\n");
	}
	return 0;	
}









