Chinaunix首页 | 论坛 | 博客
  • 博客访问: 125767
  • 博文数量: 32
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2005-06-04 21:53
文章分类

全部博文(32)

文章存档

2008年(9)

2007年(6)

2006年(8)

2005年(9)

我的朋友

分类: C/C++

2008-07-27 00:41:42

太久没写代码啦,竟然连怎么定义结构体都忘了,终于决定重新捡起来,开始认真学习啦~
 
问题:有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) |
给主人留下些什么吧!~~