感觉写的代码比老师的简单且逻辑性强哈哈哈
int main() {
int n,p,m;
while (1){
scanf("%d%d%d",&n,&p,&m);
if (n==0&&p==0&&m==0){
break;
}
else
{
queue<int> MyQ;
//从编号p小孩开始,依次把孩子们作为一个队列排好队,比如五个小孩,从三号开始,数到6走一个,
//此规则下,排好队之后,MyQ为 3 4 5 1 2
for (int i = p; i <= n; ++i) {
MyQ.push(i);
}
for (int i = 1; i < p; ++i) {
MyQ.push(i);
}
//循环m-1次,每次循环让队首去队尾,m-1次后的队首元素即是要出队的元素,即要喊m的小孩子
printf("The student's queue is :");
while (!MyQ.empty()){
int temp;
for (int i = 1; i < m; ++i) {
temp = MyQ.front();//记录当前队首孩子编号
MyQ.pop();//喊完就走
MyQ.push(temp);//到队尾排队
}
printf("%d,",MyQ.front());//每循环m-1次,刚好此时队首孩子是应该淘汰的
MyQ.pop();//淘汰队首孩子
}
}
}
#约瑟夫问题##
int n,p,m;
while (1){
scanf("%d%d%d",&n,&p,&m);
if (n==0&&p==0&&m==0){
break;
}
else
{
queue<int> MyQ;
//从编号p小孩开始,依次把孩子们作为一个队列排好队,比如五个小孩,从三号开始,数到6走一个,
//此规则下,排好队之后,MyQ为 3 4 5 1 2
for (int i = p; i <= n; ++i) {
MyQ.push(i);
}
for (int i = 1; i < p; ++i) {
MyQ.push(i);
}
//循环m-1次,每次循环让队首去队尾,m-1次后的队首元素即是要出队的元素,即要喊m的小孩子
printf("The student's queue is :");
while (!MyQ.empty()){
int temp;
for (int i = 1; i < m; ++i) {
temp = MyQ.front();//记录当前队首孩子编号
MyQ.pop();//喊完就走
MyQ.push(temp);//到队尾排队
}
printf("%d,",MyQ.front());//每循环m-1次,刚好此时队首孩子是应该淘汰的
MyQ.pop();//淘汰队首孩子
}
}
}
#约瑟夫问题##
全部评论
相关推荐

点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java 点赞 评论 收藏
分享