2015-10-30【項目1 - 猴子選大王(數組版)】

1.問題及代碼

在一個數組中,數組中用1表示猴子在圈中,用0表示猴子已經出圈,數組下標對應與猴子編號對應(例如數組元素p[0]值爲1,表示第1只猴子尚在圈中,即p[i]代表編號爲i+1的猴子是否在圈中)。
  一隻猴子出圈,則將對應的數組值置爲0;在報數過程中,要跨過值爲0的猴子。
  若m=8, n=4,初始時數組如下:
這裏寫圖片描述
  其中有3只猴子出圈後,數組中的值如下:
這裏寫圖片描述
  數到最後一隻猴子時需要折回到下標爲0的位置,猴子出圈後,還將對應元素的值置爲0。見代碼註釋。

01.#include <stdio.h>   
02.#define MaxSize 8   
03.void king(int m,int n)  
04.{  
05.    int p[MaxSize];  
06.    int i,j,t;  
07.    for (i=0; i<m; i++)         //構建初始序列,記錄m只猴子在圈中   
08.        p[i]=1;  
09.    t=-1;                       //首次報數將從起始位置爲0,即第1只猴子開始,因爲在使用p[t]前t要加1   
10.    printf("出列順序:");  
11.    for (i=1; i<=m; i++)        //循環要執行m次,有m個猴子要出圈   
12.    {  
13.        j=1;      // j用於報數   
14.        while(j<=n)  //   
15.        {  
16.            t=(t+1)%m;        //看下一隻猴子,到達最後時要折回去,所以用%m   
17.            if (p[t]==1) j++; //等同於if (p[t]==1) j++;僅當q猴子在圈中,這個位置才報數   
18.        }  
19.        p[t]=0;   //猴子出圈   
20.        printf("%d ",t+1);      //輸出出圈猴子的編號   
21.    }  
22.    printf("\n");  
23.}  
24.  
25.int main()  
26.{  
27.    int m,n;  
28.    scanf("%d %d", &m, &n);  
29.    king(m,n);  
30.    return 0;  
31.}  


2.運行結果

3.知識總結

  數組的運用。

4.學習心得

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章