码迷,mamicode.com
首页 > 其他好文 > 详细

用循环单链表实现约瑟夫环

时间:2014-05-09 18:01:58      阅读:386      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   ext   

题目:n个人编号分别是1,2,3,...,n,围坐在一张圆桌周围,从编号为k的人开始报数,数到m的人出列。然后他的下一个人开始报数,数到m的那个人又出列;依次循环,直到所有人出列。

bubuko.com,布布扣
struct LNode{
  int data;
  LNode *next;
};

//n为总人数,k为第一个开始报数的人,m为出列者喊到的数
void solve(int k,int m, int n)
{
   if(k>n || n<=0 || m<=0)
    {
       throw "Invalid argument(s)";
     }

//建立循环链表
   LNode *p = new LNode;
   p->data = 1;
   p->next = p;

   LNode *curr = p;

   for(int i=2;i<=n;i++)
   {
      LNode *q = new LNode;
      q->data = i;
      p->next = q;
      q->next = curr;
      p=p->next;
   }

//把当前指针移动到第一个报数的人
   while(--k)
   {
      curr = curr->next;
   }
    LNode *pre;
    int m1=m;
   while(n--)
   {
     while(--m1)
       {
         pre = curr;
         curr = curr->next;
        }
      m1 = m;
      cout<<curr->data<<" ";
      pre->next = curr->next;
     delete curr;
      curr = pre->next;
   }

}

int main()
{
    solve(2,2,4);
    return 0;
}
bubuko.com,布布扣


注意:while(k--)比while(--k)多循环一次,在循环体中k值大小相同。

 

用循环单链表实现约瑟夫环,布布扣,bubuko.com

用循环单链表实现约瑟夫环

标签:style   blog   class   code   java   ext   

原文地址:http://www.cnblogs.com/Xylophone/p/3708547.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!