猴子选大王(数组版)
在之前的项目中,实现了猴子选大王的项目要求,本次实践,将再次实现这个项目,但是运用数组的方法,做到一题多解,集思广益。
项目要求如下:一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王。输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号猴子。 
要求采用数组作为存储结构完成。 

法一:
在一个数组中,数组中用1表示猴子在圈中,用0表示猴子已经出圈,数组下标对应与猴子编号对应(例如数组元素p[0]值为1,表示第1只猴子尚在圈中,即p[i]代表编号为i+1的猴子是否在圈中)。 
  一只猴子出圈,则将对应的数组值置为0;在报数过程中,要跨过值为0的猴子。 
  若m=8, n=4,初始时数组如下: 
 
  其中有3只猴子出圈后,数组中的值如下: 
 
  数到最后一只猴子时需要折回到下标为0的位置,猴子出圈后,还将对应元素的值置为0。见代码注释。
实现源代码如下:
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :main.cpp*
//*作者:田长航*
//*完成时间:2017年10月19日*
//*版本号:v1.0*
//*问题描述:算法库测试函数*
//*输入描述:无*
//*程序输出:测试结果*
#include <stdio.h>
#define MaxSize 8
void king(int m,int n)
{int p[MaxSize];int i,j,t;for (i=0; i<m; i++)         //构建初始序列,记录m只猴子在圈中p[i]=1;t=-1;                       //首次报数将从起始位置为0,即第1只猴子开始,因为在使用p[t]前t要加1printf("出列顺序:");for (i=1; i<=m; i++)        //循环要执行m次,有m个猴子要出圈{j=1;      // j用于报数while(j<=n)  //{t=(t+1)%m;        //看下一只猴子,到达最后时要折回去,所以用%mif (p[t]==1) j++; //等同于if (p[t]==1) j++;仅当q猴子在圈中,这个位置才报数}p[t]=0;   //猴子出圈printf("%d ",t+1);      //输出出圈猴子的编号}printf("\n");
}int main()
{int m,n;scanf("%d %d", &m, &n);king(m,n);return 0;
}
运行结果截图如下:

法二:
数组同参考解答1。在报数过程中,不再判断为0为1,而是设置一个用于累加的变量,猴子在圈时加1相当于报数,出圈后是加0相当于没有报数。
实现源代码如下:
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :main.cpp*
//*作者:田长航*
//*完成时间:2017年10月19日*
//*版本号:v1.0*
//*问题描述:算法库测试函数*
//*输入描述:无*
//*程序输出:测试结果*
#include <stdio.h>
#define MaxSize 8
void king(int m,int n)
{int p[MaxSize];int i,s=0,t;for (i=0; i<m; i++)         //构建初始序列,记录m只猴子在圈中p[i]=1;t=0;                        //首次报数的起始位置为0,是第1只猴子printf("出列顺序:");for (i=1; i<=m; )       //循环要执行m次,有m个猴子要出圈{s=s+p[t]; //s累加中,猴子在圈时加1相当于报数,出圈后是加0相当于没有报数。if(s==n){p[t]=0;   //猴子出圈printf("%d ",t+1);      //输出出圈猴子的编号s=0;   //重新开始累加i++;   //报数的猴子加1}t=(t+1)%m;    //再报数时,从下一只猴子开始}printf("\n");
}int main()
{int m,n;scanf("%d %d", &m, &n);king(m,n);return 0;
}
运行结果截图如下:

法三:
用数组元素保存猴子的编号,一只猴子出圈,执行从数组中删除元素的操作,以此重复。 
  若m=8, n=4,初始时数组如下: 
 
  其中有3只猴子出圈后,数组中的值如下: 
 
  数到最后一只猴子时需要折回到下标为0的位置,猴子出圈后,还还要实施删除数组中元素(即将后面的数据前移)的工作。见代码注释。
实现源代码如下:
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :main.cpp*
//*作者:田长航*
//*完成时间:2017年10月19日*
//*版本号:v1.0*
//*问题描述:算法库测试函数*
//*输入描述:无*
//*程序输出:测试结果*
#include <stdio.h>
#define MaxSize 100
void king(int m,int n)
{int p[MaxSize];int i,j,t;for (i=0; i<m; i++)         //构建初始序列,记录m只猴子在p[0]~p[m-1]中p[i]=i+1;t=0;                        //首次报数的起始位置为0printf("出列顺序:");for (i=m; i>=1; i--)        //循环要执行m次,有m个猴子要出圈;共有i从m开始递减至1,i还表示在圈中猴子的数目{t=(t+n-1)%i;            //从t开始数1,其后第n-1个将数到n,t加n-1用%i取余,目的是到达最后一个猴子可以折回去继续数printf("%d ",p[t]);     //编号为p[t]的元素出列for (j=t+1; j<=i-1; j++)//后面的元素前移一个位置,删除了编号为p[t]的猴子p[j-1]=p[j];}printf("\n");
}int main()
{int m,n;scanf("%d %d", &m, &n);king(m,n);return 0;
}
运行结果截图如下:

数据结构上机实践第八周项目6- 猴子选大王(数组版)相关推荐

  1. 数据结构上机实践第八周项目9-广义表算法库及应用

    广义表算法库及应用 为了丰富算法库,以应对各类工程的需要,本次实践将进行广义表算法库的建立以及应用. 项目要求一: 建立广义表算法库,包括:  ① 头文glist.h,定义数据类型,声明函数:  ② ...

  2. 数据结构上机实践第八周项目2- 建立链串的算法库

    建立链串的算法库 一般每一种数据结构都不会局限于在连续空间内的存取,那我们的串自然也不反常,本次实践将建立链串的算法库,应用于有需求的工程当中,提高程序的容错性. 本次实践依然会用到多文件组织工程的建 ...

  3. 数据结构上机实践第八周项目8-稀疏矩阵的三元组表示的实现及应用

    稀疏矩阵的三元组表示的实现及应用 在现代社会中,在一个大量的人群集体中,总会有和某个人有相互之间的关系或者单向关系的,那我们的矩阵也是如此,稀疏矩阵压缩存储的方式,便可以让这种关系一目了然,巧妙应用. ...

  4. 数据结构上机实践第八周项目7—对称矩阵的压缩存储及基本运算

    对称矩阵的压缩存储及基本运算 贺老师的慕课当中,给我们拓展了这样的知识. 所以,本次的项目实践要求如下: 用压缩形式存储对称矩阵,实现下面的操作并测试 void Init(int *&b);/ ...

  5. 数据结构上机实践第八周项目5 - 计数的模式匹配

    计数的模式匹配 模式匹配在生活中运用广泛,日常所见的指纹识别,人脸识别......无一不用到模式匹配,为了体现模式匹配的基本思想,本次实践将实现简单的字符串的计数模式匹配. 项目要求如下:采用顺序结构 ...

  6. 数据结构上机实践第八周项目4-字符串加密

    字符串加密 密码在我们的生活中很常见,现在的加密算法最常用的是MD5和SHA512散列式算法,最早的密码加密方式很简单,容易被破译,但是却引领信息安全的潮流,本次实践,将实现最早的字符串加密方式,采用 ...

  7. 数据结构上机实践第八周项目3-顺序串算法

    顺序串算法 本次实践项目要求如下: 采用顺序存储方式存储串,实现下列算法并测试:  (1)试编写算法实现将字符串S中所有值为c1的字符换成值为c2的字符:  void Trans(SqString * ...

  8. 数据结构上机实践第八周项目1- 建立顺序串的算法库

    建立顺序串的算法库 本次实践将建立顺序串的算法库,这样可以方便的将此算法运用于我们的所需的工程中,简化操作. 本次实践将用到多文件组织工程的建立,建立方法可以点击此处参照.(工程环境:Visual C ...

  9. 数据结构上机实践第11周项目1 - 图基本算法库

    图基本算法库   本次实践将建立图的基本算法库,用以丰富算法库,灵活应对更多样的工程,所谓"技多不压身",算法亦如此.   本次实践将运用多文件组织工程的建立,点击此处参考.(编译 ...

最新文章

  1. ISAPI在IIS7上的配置
  2. Python爬虫对json数据解析爬取
  3. 基于Delphi API写的UDP通讯类
  4. 科学计算机要用的电池是几号,科学计算器的常识及注意事项
  5. haarcascade_frontalface_default.xml等文件
  6. mysql全局变量 error_记录——node-mysql连接池遇到的全局变量问题
  7. MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)
  8. Linux学习:第六章-Linux服务和进程管理
  9. POJ 1989 The Cow Lineup【最短非子序列】
  10. 使用Docker搭建LAMP环境,上线wordpress
  11. 共享单车或开启了物联网的大门,新的变革即将开启
  12. python分行打印list_python如何用print打印出列表
  13. android wear5.0,Android Wear安卓5.0正式到来
  14. 完整版 html代码简洁说明,【完整版-HTML代码简介说明-适合新手】讲述.ppt
  15. 深度学习进阶课程10---减少Overfitting的方法Regularization
  16. 服务器更新git版本报错 git-compat-util.h:14:2:error “Required C99 support is in a test phase“
  17. yang模型中rpc_RPC校正方法研究
  18. 贷前审批策略的6个搭建思路
  19. hrbust 哈理工oj 1989 营救小组【BFS】
  20. K8S系列(六)DaemonSet详解

热门文章

  1. [再学Python] - 1 - 数据类型
  2. windows下安装Redis数据库
  3. 贺利坚老师汇编课程50笔记:call和ret配合
  4. linux服务器查看系统装到哪个盘,查看linux安装了什么服务器地址
  5. cad计算机制图论文,机械制图论文范文
  6. 关于Linux MongoDB的安装
  7. mysql 索引长度解释及不使用索引的一种特殊情况
  8. jQuery-瀑布流-绝对定位布局(二)(延迟AJAX加载图片)
  9. Sqlserver2008 数据库镜像会话的初始连接
  10. struts2.3+spring3.2+hibernate4.2例子