陕西师范大学第七届程序设计竞赛 D-ZQ的睡前故事 【约瑟夫环】

题目描述 
    ZQ是一个拥有n女朋友的万人迷,她的每一个女朋友每天晚上都会挨个给他打电话,要他讲了睡前故事才能睡觉。可是,每次他的女朋友都会挑他在吃鸡的时候打电话,ZQ总是因为挂机被舍友赶出宿舍,于是,ZQ告诉他的女朋友们,别打电话了,他会主动打过去给他们讲故事,再打电话就分手!
    于是,ZQ把他的女朋友名字写在纸上,画成一圈,顺时针编号为1~n,然后从1开始顺时针数。在每一次数数中,ZQ数k个就停下来,然后给选中的女朋友打电话讲故事。 
    现在需要你按顺序告诉我们他给女朋友打电话的顺序


输入描述:
先输入一个t,然后t组数据,每行包含两个数字n,k,n<20,k>0
输出描述:
按顺序输出每轮被选中的女朋友的编号。
示例1
输入


3
10 3
5 2
11 4
输出


3 6 9 2 7 1 8 5 10 4
2 4 1 5 3

4 8 1 6 11 7 3 2 5 10 9

点击打开链接

#include<bits/stdc++.h>
using namespace std;
 
int main()
{
    int M;
    scanf("%d", &M);
    while(M--)
    {
        int n, m;
        scanf("%d%d", &n, &m);
        queue <int> q;
        for(int i = 1; i <= n; i++)
            q.push(i);
        while(q.size() != 1)
        {
            for(int i = 1; i <= m; i++)
            {
                if(i == m)
                {
                    printf("%d ", q.front());
                    q.pop();
                }
                else
                {
                    int a = q.front();
                    q.pop();
                    q.push(a);
                }
            }
        }
        printf("%d\n", q.front());
        q.pop();
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/head_hard/article/details/80302082
今日推荐