首页 > 其他 > 详细

洛谷 - P1996 - 约瑟夫问题 - 链表

时间:2019-01-25 11:02:29      阅读:178      评论:0      收藏:0      [点我收藏+]

试了一下数组实现的双向链表,是挺难用的,估计是应该写个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 - 约瑟夫问题 - 链表

原文:https://www.cnblogs.com/Yinku/p/10317761.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!