洛谷 - P1996 - 約瑟夫問題 - 鏈表
阿新 • • 發佈:2019-01-25
scanf 約瑟夫問題 div fine next數組 long fin == mes
試了一下數組實現的雙向鏈表,是挺難用的,估計是應該寫個get_next()函數比直接用next數組好。
#include<bits/stdc++.h> using namespace std; #define ll long long int _next[101]; int _prev[101]; int n,m; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<n-1;i++){ _next[i]=(i+1)%n; _prev[(i+1)%n]=i; } _next[n-1]=n; _prev[n]=n-1; _next[n]=1; _prev[1]=n; int cntm=0; int cntn=n; int i=1; while(cntn){ cntm++; /*cout<<"i="<<i<<" cntm="<<cntm<<endl; for(int j=1;j<=10;j++){ printf("%d ",_next[j]); } printf("\n"); for(int j=1;j<=10;j++){ printf("%d ",j); } printf("\n\n");*/ if(cntm==m){ _next[_prev[i]]=_next[i]; _prev[_next[i]]=_prev[i]; printf("%d%c",i," \n"[cntn==1]); cntm=0; cntn--; } i=_next[i]; } }
洛谷 - P1996 - 約瑟夫問題 - 鏈表