ايران ويج

نسخه‌ی کامل: ليست پيوندي چرخشي مربوط به حذف سرباز ها
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
ليست پيوندي چرخشي مربوط به حذف سرباز ها
این قضیه کاملا واقعی می باشد.
سربازان فرانسوی در جنگی در میان دشمن به دام می افتند.
تصمیم می گیرند که همه دور هم جمع شوند که تعداد آنها یک عددی می شود.
بعد یک عدد دلخواه داده می شود و از اول به تعداد اون عدد شمارش می شود و آن سربازی که به ان بیفتد حذف می شود این روند تا آخر ادامه دارد تا این که فقط یک سرباز باقی بماند سپس آن سرباز باید از میان دشمن حرکت کند و کمک خبر کند.

کد:
#include <iostream.h>
#include <conio.h>

struct node
{
  int no;
  node *link;
}*last=NULL;

void make_list(int x)
{
  node *temp;
  for(int i=1;i<=x;i++)
  {
    temp=new node;
    temp->no=i;
    if(last==NULL)
    {
      last=temp;
      temp->link=temp;
    }
    else
    {
      temp->link=last->link;
      last->link=temp;
      last=temp;
    }
  }
}

void del(int x)
{
  node *p,*q;
  int i;
  p=last->link;
  while(last->link!=last)
  {
    for(i=1;i<x;i++)
    {
      q=p;
      p=p->link;
    }
    q->link=p->link;
    if(p==last)  last=q;
    delete p;
    p=q->link;
  }
  cout<<last->no;
}

main()
{
  clrscr();
  make_list(10);
  del(4);
}