0
点赞
收藏
分享

微信扫一扫

UVA - 133 The Dole Queue

1kesou 2023-04-07 阅读 30


题目大意: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;	



}



举报

相关推荐

0 条评论