太久没写代码啦,竟然连怎么定义结构体都忘了,终于决定重新捡起来,开始认真学习啦~
问题:有M个猴子围成一圈,每个有一个编号,编号从1到M。打算从中选出一个大王。经过协商,决定选大王的规则如下:从第一个开始,从1开始数,数到第N个数的猴子出圈,然后下一个猴子,又重新从1开始数,最后剩下来的就是大王。
要求:从键盘输入M,N,编程计算哪一个编号的猴子成为大王。
敲了两个小时的结果:
#include
#include
#include
////////////////定义结构体///////////////
struct monkey
{
int number;
struct monkey *next;
};
///////////////////////////////
typedef struct monkey* monkey; /////////使用typedef定义结构体的名字……
void main()
{
monkey monkey_1;//猴子的头指针。。
monkey p; //活动指针,用来数数
int m; //m只猴子
int n; //数到N的被淘汰
int i;
monkey_1=(monkey)malloc(sizeof(monkey));
if(monkey_1==NULL)
{
printf("Error!\n");
return;
}
p=monkey_1;
/////////////////////读入数据/////////////
printf("Please input the m:");
scanf("%d",&m);
printf("\nPlease input the n:");
scanf("%d",&n);
/////////////////////////////////////////
//////////////////为每个猴子编号//////////////////////
for(i=1;i {
p->number=i;
p->next=(monkey)malloc(sizeof(monkey));
if(p->next==NULL)
{
printf("Error!\n");
return;
}
p=p->next;
}
p->number=i;
p->next=monkey_1;
////////////////////////////////////////
p=monkey_1;
for(i=1;i<=m;i++)
{
printf("\t%d",p->number);
p=p->next;
}
p=monkey_1;
i=1;
while(p->next!=p)
{
if((i+1)%n==0)
{
monkey_1=p;
monkey_1->next=monkey_1->next->next;
//p=p->next->next;////逻辑错误,???呵呵,是个值得思考的问题!!!
i=1;
p=monkey_1->next;
}
else
{
i++;
p=p->next;
}
}
printf("\nThe monkey king is %d!\n",p->number);
////////////释放内存空间,有问题,还没想好怎么修改……////////////
// for(i=1;i<=m;i++)
// {
// p=p->next;
// free(p);
// }
/////////////////////////////////////////////
}
阅读(3093) | 评论(0) | 转发(0) |