/*
1.猴子选大王。机会是靠自己创造的。
就拿孙悟空来说,他并非天生的大王,
他的成功也是自己一步一步努力的结果。
传说当年花果山一堆猴子要选大王,一堆猴子都有编号,
分别是1,2,3,... ,m ,这群猴子(m只)按照1至m的顺序围坐一圈,
从第1只开始数,每数到第N个,该猴子就要离开,这样依次下来,
直到圈中只剩下最后一只猴子,则该猴子为大王。
孙悟空很快就计算出自己应当坐在哪个位置才能当大王,
于是他坐到了这个位置上,结果当上了大王。请问他应坐在哪个位置上,才能当大王?
要求:用顺序表结构实现,m和N由键盘输入
*/
#include
#include
#define MaxSize 100
typedef int ElemType;
typedef struct//定义线性表的存储类型为顺序存储
{
ElemType data[MaxSize];
int length;
}peoList;
void CreateList(peoList * &p,ElemType a[],int n)//建立顺序表并且初始化
{
int i;
p=(peoList *)malloc(sizeof(peoList));
for(i=0;i
p->data[i]=a[i];
p->length=n;
}
void DisList(peoList *p)//输出结果
{
printf("输出猴王的位置:\n");
int i;
for(i=0;ilength;i++)
if(p->data[i]==1)
printf("%d\n",i+1);
printf("\n");
}
void Yuesefu(peoList * p,int m)//计算猴王的位置
{
int i,k=0,n=p->length;
for(i=0;;i++)
{
if(p->data[i]==1)k++;
if(n==1) return;
if(k==m)
{
p->data[i]=0;
n--;
k=0;
}
if(i==p->length-1) i=-1;
}
}
int main()
{
int a[MaxSize],i,N,M=0;
peoList *p;//定义一个指向顺序表的指针
printf("请输入N和M:\n");
scanf("%d%d",&N,&M);
for(i=0;i
a[i]=1;//初始化数组a[MaxSize]
CreateList(p,a,N);//建立顺序表
Yuesefu(p,M);//计算猴王的位置
DisList(p);//输出猴王的位置
return 0;
}