閱讀871 返回首頁    go 阿裏雲 go 技術社區[雲棲]


九度題目1188:約瑟夫環

題目1188:約瑟夫環
時間限製:1 秒
內存限製:32 兆
特殊判題:否
提交:1500
解決:665
題目描述:
    N個人圍成一圈順序編號,從1號開始按1、2、3......順序報數,報p者退出圈外,其餘的

人再從1、2、3開始報數,報p的人再退出圈外,以此類推。
    請按退出順序輸出每個退出人的原序號。

輸入:
包括一個整數N(1<=N<=3000)及一個整數p。

輸出:
測試數據可能有多組,對於每一組數據,
按退出順序輸出每個退出人的原序號。

樣例輸入:
7 3
樣例輸出:
3 6 2 7 5 1 4
來源:
2003-2005年華中科技大學計算機研究生機試真題

 

鏈表環模擬
AC代碼:

#include<stdio.h>
struct Node
{
   int data;
   bool out;
   Node *next;
};
int main()
{
    int i,j,n,m,count;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
       Node *Head=new Node();
       Head->data=1;
       Head->out=false;
       Node *temp=Head;
       for(i=2;i<=n;i++)
       {
          Node *node=new Node();
          node->data=i;
          node->out=false;
          temp->next=node;
          temp=node;
       }
       temp->next=Head;//組成了一個鏈表環
       Node *p=Head;
       count=0;
       while(p&&n>0)
       {
          if(p->out==false)
          {
             count++;
             if(count==m)
             {
                if(n>1)
                   printf("%d ",p->data);
                 else
                   printf("%d\n",p->data);
                 p->out=true;
                 count=0;
                 n--;
             }
          }
          p=p->next;
       }
    }
    return 0;
}

最後更新:2017-04-03 05:39:36

  上一篇:go 一首寫不完的詩
  下一篇:go 視圖——機房收費係統