约瑟夫问题
📋 个人简介
🎉大家好,我是3月份新人榜排名第三的 ༺Blog༒Hacker༻
💬支持我:点赞👍+收藏⭐️+留言📝
🌺格言:༺永做优质༒programmer༻
📣约瑟夫问题
🔥题目描述
❄️约瑟夫问题。n个人围成一圈,从第一个人开始报数“1、2、…”,数到m的人出圈,再由下一个人开始报数,数到m的人出圈,……。输入n和m,输出依次出圈的人的编号。
🔥输入格式
❄️一行,两个用空格隔开的整数 n和 m,意义如【题目描述】。
🔥输出格式
❄️一行n个整数,中间用空格隔开,表示依次出圈人的编号。
样例数据
🔥input6 3🔥output3 6 4 2 5 1
🔥数据规模与约定
❄️1≤n≤10^5 ❄️1≤m≤10^4
💯CODE
#includeusing namespace std;int nxt[100005];int main(){int n,m,i,j,head,pre;cin>>n>>m;/*建立循环链表*/ for(i=1;i<=n;i++){ nxt[i]=i+1;}nxt[n]=1;/*模拟报数*/head=1;pre=n;for(i=1;i<=n;i++){ for(j=2;j<=m;j++){ pre=head; head=nxt[head];} cout<<head<<" ";nxt[pre]=nxt[head] ;head=nxt[head]; } return 0;}