UVA 133 The Dole Queue——思路题

网友投稿 219 2022-11-27

UVA 133 The Dole Queue——思路题

紫书上的例题,解释一下我程序中的p = (p + n + d) % n:

这条语句其实就是帮你把超出边界的情况考虑了,不用再加 if 判断了;

没越过边界时,式子商0余(p+n+d),即为正确结果;

越过边界时,式子商>=1(循环的圈数),余数相当于又从初始位置开始走m或k步进行挑选,因此还是能得到正确结果;

PS:紫书上是p = (p + n + d) % n + 1,我这里在程序中做了些改动,所以最后没有 +1 了 。

#include int n,k,m;int a[25];int go(int p, int d, int t){ while (t--) { do { p = (p + n + d) % n; } while(a[p] == 0);//走到下一个非0数字 } return p;}int main(){ int i, left, p1, p2; while (scanf("%d%d%d", &n, &k, &m) == 3 && n) { for (i = 0; i < n; i++) { a[i] = i + 1; } left = n;//还剩下的人数 p1 = n-1; p2 = 0; while (left) { p1 = go(p1, 1, k);//1表示逆时针,-1表示顺时针 p2 = go(p2, -1, m); printf("%3d", p1 + 1); left--; if (p1 != p2) { printf("%3d", p2 + 1); left--; } a[p1] = a[p2] = 0; if (left) printf(","); } printf("\n"); } return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SinoV-MIDSPAN-24-G-AT以太网供电中跨设备有何优势
下一篇:UV 442 Matrix Chain Multiplication——思路题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~