主题:[讨论]约瑟夫循环问题 高手指导一下
#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);
这条语句的作用详细解释一下 多谢了 感激不尽
#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);
这条语句的作用详细解释一下 多谢了 感激不尽