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.学习心得

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