回 帖 发 新 帖 刷新版面

主题:[讨论]约瑟夫循环问题 高手指导一下

#include <iostream.h>
#define MAXSIZE 100  
typedef struct Linear_list
{
    char elem[MAXSIZE];    
    int last;     
}SeqList;


SeqList *InitList()
{
    SeqList *L;
    L=new(SeqList);
    L->last=-1;
    return L;
}

int InsertList(SeqList *L,int i,int x)
{
    int j;
    if(L->last==MAXSIZE-1)
    {
        cout<<"表满"<<endl;
        return -1;
    }
    if(i<1||i>L->last+2)
    {
        cout<<"位置错"<<endl;
        return 0;
    }
    for(j=L->last;j>=i-1;j--)
        L->elem[j+1]=L->elem[j];
    L->elem[i-1]=x;
    L->last++;
    return 1;
}

int DeleteList(SeqList *L,int i)
{
    int j;
    if(i<1||i>L->last+1)
    {
        cout<<"不存在第i个元素"<<endl;
        return 0;
    }
    for(j=i;j<=L->last;j++)
        L->elem[j-1]=L->elem[j];
    L->last--;
    return 1;
}

void JosephCircle(SeqList *L,int m,int k)
{
    int n=m-1;
    while((L->last)!=-1)
    {
        n=(n+k-1)%((L->last)+1);//循环
        cout<<L->elem[n]<<"  ";
        DeleteList(L,n+1);
    }
    cout<<endl;
    cout<<"输出约瑟夫环结束"<<endl;
}

void main()
{
    SeqList *L;
    int m,k;
    char x;
    L=InitList();
    for(int i=1;i<=MAXSIZE;i++)
    {
        cin>>x;
        if(x=='$')
            break;
        InsertList(L,i,x);
    }
    cout<<"输入从第几个数开始:";
    cin>>m;
    cout<<"输入每几个数输入:";
    cin>>k;
    JosephCircle(L,m,k);
}


麻烦高手能把这个用单链表实现的约瑟夫循环中的 n=(n+k-1)%((L->last)+1); 
这条语句的作用详细解释一下 多谢了 感激不尽

回复列表 (共1个回复)

沙发

[quote]
麻烦高手能把这个用单链表实现的约瑟夫循环中的 n=(n+k-1)%((L->last)+1); 
这条语句的作用详细解释一下 多谢了 感激不尽[/quote]
这有什么难的呢,设置一个计数的变量就可以了啊。
不过完全没有必要这样做啊,用循环链表不就好了?

我来回复

您尚未登录,请登录后再回复。点此登录或注册