注册 登录
编程论坛 C++教室

求助 如下题

wuchunbing 发布于 2012-11-02 14:36, 281 次点击
有17个人围成一圈(编号为0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去。直到最后只剩下一
个人为止。问此人原来位置是多少号。
2 回复
#2
风之子MIKEY2012-11-02 15:14
struct man
{
 int id;
 man *next;
};
struct man *GetMan(int sum)
{
  struct man *p,*head;
  int i,j;
   p=NULL;
   head=NULL;
  for(i=0;i<sum;i++)
    {
     if(p==NULL){p=(struct man *)malloc(sizeof(struct man));head=p;}
       else
         {
            p->next=(struct man *)malloc(sizeof(struct man));
            p=p->next;
          }
       p->id=i+1;
       p->next=NULL;
    }
   p->next=head;
   return head;
}
main()
{
  struct man *pman,*p;
  int i;
  pman=GetMan(17);
  while(pman!=pman->next)
   {
     for(i=0;i<1;i++)
     {
      pman=pman->next;
      }
      p=pman->next;
      pman->next=p->next;
      pman=pman->next;
      free(p);
    }   
  printf("the number is:%d\n",pman->id);
     free(pman);
  return 0;
}
#3
wuchunbing2012-11-02 16:37
多谢大师 我很多没学到呢 类和指针 还在艰难自学中
1