【循环报数】

链接:https://www.nowcoder.com/acm/contest/121/D
来源:牛客网

题目描述

    ZQ是一个拥有n女朋友的万人迷,她的每一个女朋友每天晚上都会挨个给他打电话,要他讲了睡前故事才能睡觉。可是,每次他的女朋友都会挑他在吃鸡的时候打电话,ZQ总是因为挂机被舍友赶出宿舍,于是,ZQ告诉他的女朋友们,别打电话了,他会主动打过去给他们讲故事,再打电话就分手!

    于是,ZQ把他的女朋友名字写在纸上,画成一圈,顺时针编号为1~n,然后从1开始顺时针数。在每一次数数中,ZQ数k个就停下来,然后给选中的女朋友打电话讲故事。 

    现在需要你按顺序告诉我们他给女朋友打电话的顺序

输入描述:

先输入一个t,然后t组数据,每行包含两个数字n,k,n<20,k>0

输出描述:

按顺序输出每轮被选中的女朋友的编号。

题解:用队列存储1~n,从1开始报数,当报的次数不是k的倍数,就把队首元素放到队尾。否则出队输出。直到队列为空即可。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <queue>
using namespace std;
int main()
{
    int t,n,k;
    scanf("%d",&t);
    while(t--){
        queue<int> q;
        int cnt=0;
        scanf("%d %d",&n,&k);
        for(int i=1;i<=n;i++){
            q.push(i);
        }
        int a[21];
        int j=0;
        while(!q.empty()){
            cnt++;
            if(cnt%k==0){
                a[j++]=q.front();
                q.pop();
            }else{
                int t=q.front();
                q.pop();
                q.push(t);
            }
        }
        for(int i=0;i<j-1;i++){
            printf("%d ",a[i]);
        }
        printf("%d\n",a[j-1]);
    }
    return 0;
}

posted @   神探小小狄  阅读(203)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用
【推荐】 程序员网址大全  |  EF CodeFirst  |  百度地图.NET  |  MyNPOI  |  开源  |  我的皮肤  |  ASP.NET MVC4  |  前端提升   |  LINQ   |  WCF   |  EasyUI  | aaronyang 页脚html代码
点击右上角即可分享
微信分享提示