全tle求调

P1996 约瑟夫问题

```cpp #include<iostream> using namespace std; int n,m,a[100],s=1,js=1;//a放外面自动清0 int main() { cin>>n>>m; int chs=n; while(1) { if(js==m)//不要判a[s] { a[s]=1; chs--; cout<<s<<" "; if(chs==0) break;//这里要特判退出,不然下面的while不可能跳出 js=0; } int sjy; if(s==n) sjy=1; else sjy=s+1; while(a[sjy]==1) { if(s==n) s=1; else s++; if(sjy==n) sjy=1;//sjy特殊判,不然你s=1,sjy=1有问题 else sjy++; } if(s==n) s=1; else s++; js++; } return 0; }//完结撒花!给个关注不过分吧awa ``` @[yaoge2012](/user/1135416)
by z_z_b_ @ 2024-04-05 21:07:20


@[yaoge2012](/user/1135416) 真诚劝告楼主把代码写漂亮一点,这样别人看真的很难受
by haozige @ 2024-04-05 21:16:33


@[haozige](/user/918114) 谢谢指点
by yaoge2012 @ 2024-04-05 21:19:59


@[yaoge2012](/user/1135416) ``` #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:07:09


|