求助!!!!!

P1996 约瑟夫问题

@[bjqxszx_zhaijingxin](/user/1036939) ```cpp #include<bits/stdc++.h> using namespace std; stack<int> q; int main() { int n,m; cin>>n>>m; queue<int> q; for(int i=1;i<=n;i++){ q.push(i); } int x=0; while(!q.empty()){ for(int i=1;i<m;i++){ x=q.front(); q.pop(); q.push(x); } cout<<q.front()<<" "; q.pop(); } return 0; } ``` 我的代码可以参考一下
by leixiuzi @ 2024-04-19 18:52:08


@[bjqxszx_zhaijingxin](https://www.luogu.com.cn/user/1036939) 第八行应该是k[0]=1;
by xuzihao12345 @ 2024-04-23 19:46:23


@[bjqxszx_zhaijingxin](/user/1036939) 也可以用vector ```cpp #include<bits/stdc++.h> using namespace std; vector<int> li; int n,m; int main(){ cin>>n>>m; for(int i=1;i<=n;i++) li.push_back(i); int idx=0; for(int i=1;i<=n;i++){ idx=(idx+m-1)%li.size(); cout<<li[idx]<<' '; li.erase(li.begin()+idx); } return 0; } ```
by 3_14 @ 2024-04-24 17:04:14


@[bjqxszx_zhaijingxin](/user/1036939) struct超简单 ``` #include<bits/stdc++.h> using namespace std; struct p{ int sp; int n_; int last; int num; int next; }; int main(){ int n,m; cin>>n>>m; p al[n]; al[0].last=n-1,al[0].num=1,al[0].next=1,al[0].n_=1,al[0].sp=0; for(int i=1;i<n;i++){ al[i].last=(i+n)%(n+1),al[i].num=i+1,al[i].next=(i+1)%n; al[i].n_=al[i].num,al[i].sp=i; } for(int i=0;;i=al[i].next){ if(al[i].num==m){ cout<<al[i].n_<<' '; al[al[i].next].num=1,al[al[i].last].next=al[i].next, al[al[i].next].last=al[i].last; i=al[i].next; } else{ al[i].num=al[al[i].last].num+1; } if(al[i].next==al[i].sp){ cout<<al[i].n_; return 0; } } return 0; } ```
by zzc666666 @ 2024-04-24 17:05:54


@[bjqxszx_zhaijingxin](/user/1036939) 还是用队列吧 ### 遍历 把队头元素弄到队尾,再删掉队头
by kaijie2002 @ 2024-05-09 22:14:44


|