1334:例2-3围圈报数
Posted fuxiqi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1334:例2-3围圈报数相关的知识,希望对你有一定的参考价值。
1334:【例2-3】围圈报数时间限制: 1000 ms 内存限制: 65536 KB 提交数: 2253 通过数: 1482 【题目描述】有nn个人依次围成一圈,从第11个人开始报数,数到第mm个人出列,然后从出列的下一个人开始报数,数到第mm个人又出列,…,如此反复到所有的人全部出列为止。设nn个人的编号分别为1,2,…,n1,2,…,n,打印出列的顺序。 【输入】nn和mm。 【输出】出列的顺序。 【输入样例】4 17 【输出样例】1 3 4 2 【提示】n≤100n≤100。 【来源】一本通 |
解析:
若是使用链表,这题的复杂程度无疑大大上升了,其实,我们完全用不着那么麻烦,一个个地报数,可以想象成一个队列,一个人报完数后,判断他所报的数是不是出局的数,如果是,直接弹出,但若不是,将其移动至队尾即可。
我们使用一个队列q进行模拟,在读取总人数和出局数字后,把这些人一个个地压入队列尾部。在使用队列之前,需要先加上头文件queue。
1 #include<cstdio> 2 #include<iostream> 3 #include<queue> 4 using namespace std; 5 queue<int>q; 6 int i,j,k; 7 int n,m,now=1; 8 using namespace std; 9 int main() 10 { 11 scanf("%d%d",&n,&m); //读取数据 12 for(i=1;i<=n;i++) //初始化队列 13 q.push(i); 14 while(!q.empty()) //在队列不为空时继续模拟 15 { 16 if(now==m) 17 { 18 printf("%d ",q.front() ); //打印出局的人的编号 19 q.pop(); //出局 20 now=1; //初始化现在的数字 21 } 22 else 23 { 24 now++; 25 q.push(q.front()); //排至队尾 26 q.pop();; 27 } 28 } 29 return 0; 30 }
推荐相似题:
P1996 约瑟夫问题
以上是关于1334:例2-3围圈报数的主要内容,如果未能解决你的问题,请参考以下文章
python围圈报数 青少年编程电子学会python编程等级考试三级真题解析2021年6月