【基础练习】【模拟】Uva133 - The Dole Queue题解
有点点像约瑟夫的变式 注意函数形参要用逗号隔开
这个题目中ruka提供的处理环的方法很有用 可以学习一下
再一个就是出圈后相应位置赋值为零很方便
代码放上:
#include<cstdio>
using namespace std;
int n,k,m,a[22];
int go(int now,int plus,int num){
while (num--){
do{now=(now+plus+n-1)%n+1;
}
while (a[now]==0);
}
return now;
}
int main(){
while (scanf("%d%d%d",&n,&k,&m)==3 && n){/*n is total,k id n and m is b*/
for (int i=1;i<=n;i++) a[i]=i;
int left=n;
int p1=n,p2=1;
while (left){
p1=go(p1,1,k);
p2=go(p2,-1,m);
printf("%3d",a[p1]);
left--;
if (a[p1]!=a[p2]) {
printf("%3d",a[p2]);
left--;
}
a[p1]=a[p2]=0;
if (left) printf(",");
}
printf("\n");
}
return 0;
}
第一遍竟然WA了 还以为怎么回事 仔细一看才发现是格式写错了 如果两个人数的不同 中间不用加逗号
上述代码已修改
信息组,久违了。
——唱彻《阳关》泪未干,功名馀事且加餐。
还没有评论,来说两句吧...