SMU算法题 Weijie环

在欢送会上,大家决定玩一个游戏,这个游戏叫做Weijie 环,所有的N 个人站成一圈,由一个人随意说一个数字A,从他顺时针下一个人开始顺时针数,第A个人出圈(下次就不数出圈的人),然后从第A 个人顺时针后面1 个人开始顺时针数A+1,第A+1 个人出圈,依次数A+2,A+3……,最后留在圈内的人获胜。
现在轮到BobWu 说数字,他报出了一个数字A,现在BobWu 想知道自己是第几个出列的。

详情:http://mstc.shmtu.edu.cn/oj/problem.php?cid=1003&pid=2

好像以前看过类似的题,不过没做出来,当时也没准备做……结果发现就其本身而言不用数组也可以。

#include <stdio.h>

int main(void)
{
    int i, a[100], n[100], t, k[100], b, j;

    scanf("%d", &t);


    for(j = 0; j < t; j++)
    {
        scanf("%d", &n[j]);
        scanf("%d", &a[j]);

        b = a[j];

        for (i = 1, k[j] = 0; n[j] > 0; b--)
        {
            if (b == 0 && i == 1)
            {
                k[j]++;
                break;
            }
            else if(b == 0)
            {
                b = a[j] + 1;
                n[j]--;
                k[j]++;
            }
            i++;
            if (i > n[j])
                i = 1;
        }
    }


    for (j = 0; j < t; j++)
        printf("Case #%d: %d\n", j + 1, k[j]);

    return 0;
}

算法渣跪了,不过思路很简单,首先i控制点到第几个人,如果点完最后一个,重头再来,k来计数,第几个out,其他字母含义跟题目一样。

这样输出的就OK了

如果您觉得文章不错,可以通过赞助支持我

标签: 源码, 代码段, 题目, 算法

已有 2 条评论

  1. 这个好像在哪里看到过

  2. 数据结构课上老师布置的思考题,没做。
    话说,网站那要填“http:// ” 反人类啊!

  3. Frank_Kang

    learned^_^

添加新评论