标签:
/*
1. 猴子选大王。机会是靠自己创造的。
就拿孙悟空来说,他并非天生的大王,
他的成功也是自己一步一步努力的结果。
传说当年花果山一堆猴子要选大王,一堆猴子都有编号,
分别是1,2,3,... ,m ,这群猴子(m只)按照1至m的顺序围坐一圈,
从第1只开始数,每数到第N个,该猴子就要离开,这样依次下来,
直到圈中只剩下最后一只猴子,则该猴子为大王。
孙悟空很快就计算出自己应当坐在哪个位置才能当大王,
于是他坐到了这个位置上,结果当上了大王。请问他应坐在哪个位置上,才能当大王?
要求:用顺序表结构实现,m和N由键盘输入
*/
#include<stdio.h>
#include<stdlib.h>
#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<n;i++)
p->data[i]=a[i];
p->length=n;
}
void DisList(peoList *p) //输出结果
{
printf("输出猴王的位置:\n");
int i;
for(i=0;i<p->length;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<N;i++)
a[i]=1; //初始化数组a[MaxSize]
CreateList(p,a,N); //建立顺序表
Yuesefu(p,M); //计算猴王的位置
DisList(p); //输出猴王的位置
return 0;
}
标签:
原文地址:http://www.cnblogs.com/happyhyq/p/4872418.html