UVA - 133 The Dole Queue

来源:互联网 发布:停车场收费查询软件 编辑:程序博客网 时间:2024/06/02 05:31

题目大意: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 0
原创粉丝点击