小孩报数问题

xiaoxiao2021-02-28  94

约瑟夫环

有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64)  接下来每行输入一个小孩的名字(人名不超过15个字符)  最后一行输入W,S (W < N),用逗号","间隔 Output 按人名输出小孩按顺序出列的顺序,每行输出一个人名 Sample Input 5 Xiaoming Xiaohua Xiaowang Zhangsan Lisi 2,3 Sample Output Zhangsan Xiaohua Xiaoming Xiaowang Lisi #include<stdio.h> #include<queue> using namespace std; int main() { int n,w,s,cnt; char str[70][20]={0}; scanf("%d",&n); getchar(); for(int i=1;i<=n;i++) gets(str[i]); scanf("%d,%d",&w,&s); queue<int> q; for(int i=w;i<=n;i++) q.push(i); for(int i=1;i<w;i++) q.push(i); cnt=s; while(!q.empty()) { int a=q.front(); cnt--; q.pop(); if(cnt==0) { puts(str[a]); cnt=s; continue; } q.push(a); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-96583.html

最新回复(0)