C語言實現猴子選大王(約瑟夫問題)

來源:互聯網
上載者:User

標籤:



這裡使用數組類比迴圈鏈表

#include <stdio.h>
int main()
{
 int leftCount = 15;  //剩餘猴子的數量
 int countNum = 0;   //目前數到了第幾個
 int index = 0;      //定義當前數組的下標從0開始。
 int number = 7;   //數到第七個猴子就退出
 int a[15];    //一共15個猴子
 int k, i;    
 //先初始化,讓所有的都為1
 for(i = 0; i < 15; i++)
 {
  a[i] = 1;
 }

 //然後每踢出去一個就在剩下的總數裡減一,
 //那麼當剩下的總數是一的時候,
 //那麼就說明找到了已經找到了大王
 while(leftCount != 1)
 {
   //當元素是1的時候就進行計數,
   //當這個數量達到7的時候就說明,該把第七個踢出去了
   if(a[index] == 1)
   {
    
    //如果當前剩餘猴子的數量大於1,
    //然後標記還為1,那麼就在計數器中加1
    countNum++;
    
    //計數器的數和設定被踢出的猴子的數目相同的時候,
    //踢出猴子,把標記改為0
    if(countNum == 7){
     countNum = 0;           //重新整理計數器,初始化為0
     a[index] = 0;           //改變當前的標記為0
     leftCount--;    //在剩餘的猴子裡面減一
    }
   }
  
   //每次判斷完一個元素,數組的下標就加一
   index ++;  
   //當判斷到數組的末尾的時候,這裡類比迴圈鏈表,
   //鏈表的尾部,接著頭部,那麼這裡數組的尾部,就接著頭部
   //就把數組的最後面的元素的後一個元素的下標變為0,
   //也就是又回到了第一個元素
   if(index == 15){
    index = 0;
  }
 }


 //到此為止已經找到了大王,
 //那麼只有元素為1的猴子才是大王。
 //那麼就迴圈尋找那個是1?
 for(k = 0; k < 15; k++)
 {
   if(a[k] == 1){
    printf("%d", k + 1);
   }
 }
 return 0;
}


C語言實現猴子選大王(約瑟夫問題)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.