1. 程式人生 > >洛谷 - P1996 - 約瑟夫問題 - 鏈表

洛谷 - P1996 - 約瑟夫問題 - 鏈表

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 - 約瑟夫問題 - 鏈表