#include<bits/stdc++.h>
using namespace std;
int n, k, m, a[28], l, g1, g2;
int go(int p,int d,int t){//p是人,d是方向,t是人数
while(t--){//执行t次
do{(p=(p+d+n-1)%n+1);}while(a[p]==0);//删人操作
}
return p;
}
int main() {
while (scanf("%d%d%d", &n, &k, &m) == 3 && n) {
for(int i=1;i<=n;i++)a[i]=i;
l=n;g1=n;g2=1;//初始设定
while(l){
g1=go(g1,1,k);
g2=go(g2,-1,m);
printf("%3d",g1);
l--;
if(g1!=g2){
printf("%3d",g2);
l--;
}
a[g1]=a[g2]=0;
if(l)printf(",");//一轮过后输出“,”
}
printf("\n");
}
return 0;
}
UVA133 - The Dole Queue
最新推荐文章于 2024-09-16 17:46:36 发布
本文描述了一个C++程序,解决了一个问题,即在一个环形数组中,多人按照给定方向轮流删除元素,同时跟踪每个人的最终位置。通过go函数实现逻辑,main函数控制流程并输出结果。
摘要由CSDN通过智能技术生成