【基础练习】【模拟】Uva133 - The Dole Queue题解

柔光的暖阳◎ 2022-08-06 14:12 232阅读 0赞

有点点像约瑟夫的变式 注意函数形参要用逗号隔开

这个题目中ruka提供的处理环的方法很有用 可以学习一下

再一个就是出圈后相应位置赋值为零很方便

代码放上:

  1. #include<cstdio>
  2. using namespace std;
  3. int n,k,m,a[22];
  4. int go(int now,int plus,int num){
  5. while (num--){
  6. do{now=(now+plus+n-1)%n+1;
  7. }
  8. while (a[now]==0);
  9. }
  10. return now;
  11. }
  12. int main(){
  13. while (scanf("%d%d%d",&n,&k,&m)==3 && n){/*n is total,k id n and m is b*/
  14. for (int i=1;i<=n;i++) a[i]=i;
  15. int left=n;
  16. int p1=n,p2=1;
  17. while (left){
  18. p1=go(p1,1,k);
  19. p2=go(p2,-1,m);
  20. printf("%3d",a[p1]);
  21. left--;
  22. if (a[p1]!=a[p2]) {
  23. printf("%3d",a[p2]);
  24. left--;
  25. }
  26. a[p1]=a[p2]=0;
  27. if (left) printf(",");
  28. }
  29. printf("\n");
  30. }
  31. return 0;
  32. }

第一遍竟然WA了 还以为怎么回事 仔细一看才发现是格式写错了 如果两个人数的不同 中间不用加逗号

上述代码已修改

信息组,久违了。

——唱彻《阳关》泪未干,功名馀事且加餐。

发表评论

表情:
评论列表 (有 0 条评论,232人围观)

还没有评论,来说两句吧...

相关阅读

    相关 救济金发放(The Dole Queue)

    n(n<20)个人站成一圈,逆时针编号为1~n。有两个官员,A从1开始逆时针数,B从n开始顺时针数。每一轮中A数到k个就停下来,B数到m个就停下来(注意有可能两个官员停在同一个