首页 > 其他 > 详细

洛谷 P1996 约瑟夫问题

时间:2019-11-30 11:25:12      阅读:70      评论:0      收藏:0      [点我收藏+]

题目背景

约瑟夫是一个无聊的人!!!

题目描述

n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.

输入格式

n m

输出格式

出圈的编号

输入输出样例

输入 #1
10 3
输出 #1
3 6 9 2 7 1 8 5 10 4

# include <cstdio>
# include <iostream>
using namespace std;
struct node
{
int data;
node *next;
};
int main()
{ int x,n,m,t=0;
cin>>m>>n;//if(m==0&&n==0) break;
node *head,*tail,*listnode;
head=tail=NULL;//初始链表为空
for(int i=1;i<=m;i++)
{ listnode=new node;//new为C++动态分配内存的运算符,分配一个结点
listnode->data=i;//新结点数据域赋值
listnode->next=head;//新结点指针域赋值

if(head==NULL) head=tail=listnode;//链表为空,插入第一个结点
else
{
tail->next=listnode;//在链表尾部插入新结点
tail=listnode;//更新链表尾部指针
}
}

if(head==NULL) return 0;//链表为空,不进行运算,结束程序
listnode=head;
while(listnode->next!=listnode)
{
for(int i=1;i<=n-2;i++)
listnode=listnode->next;
cout<<listnode->next->data<<‘ ‘;
listnode->next=listnode->next->next;
listnode=listnode->next;
}

cout<<listnode->data<<endl;

return 0;
}


链表的模板题,熟悉如何建立链表,删除链表中的元素就可以了

洛谷 P1996 约瑟夫问题

原文:https://www.cnblogs.com/xcsj/p/11961694.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!