您的位置:首页 > 理论基础 > 数据结构算法

2015-10-30【项目1 - 猴子选大王(数组版)】

2015-10-30 08:27 309 查看
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.学习心得
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  上机 数据结构 数组