zoukankan      html  css  js  c++  java
  • 【循环报数】

    链接: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
    ",a[j-1]);
        }
        return 0;
    }
    

  • 相关阅读:
    基础【五】字典的操作方法
    基础【四】列表的操作方法
    基础【三】字符串的操作方法
    基础【二】while循环及基本运算符
    基础【一】基础数据类型
    C++ string 深拷贝 与 浅拷贝
    多进程引用的动态链接库中的全局变量问题
    C++ 在类里面使用多线程技术
    openwrt 解决包依赖关系
    lua 的元表与元方法
  • 原文地址:https://www.cnblogs.com/kzbin/p/9205229.html
Copyright © 2011-2022 走看看