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