猴子選大王

題目大意:
      有n只猴子,編號1、2、···n圍成一圈,從第一隻猴子報數,報到m的猴子離開,然後剩下的猴子接着從1開始報數,直到剩下一隻猴子,則剩下的猴子爲大王

題目分析:
      這裏圍成一圈報數,關鍵是怎麼樣模擬出一個圈,用隊列可以很好的解決這個問題。先將前所有猴子的編號入隊,然後將前m-1只分別出隊和入隊,在將第m只猴子出隊,如此循環,直到剩下最後一隻猴子。

題目代碼:

#include
 using namespace std;


 int main ()
 {
     int n,m;
int i,j;
int a[100];        //存放猴子的編號
int head,tail;     //隊列的頭和尾
int temp;            
 
while(cin>>n>>m)
{
 
  if(m==0 && n==0)
  break;

       memset(a,0,sizeof(a));

       for(i=1;i<=n;i++)             //編號初始化
  a[i]=i;

  head=1;tail=n+1;          
   
  while((tail-head)!=1)       
  {
      for(j=1;j<=m-1;j++)        //前面的m-1個先出隊然後進隊
  {
      temp=a[head];
  head++;

                      a[tail]=temp;
  tail++;
  }

          head++;                        //第m個直接越過
  
   }

  cout<<a[head]<<endl;
}
 
 
 
   return 0;
 }
發佈了26 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章