1. /*
  2. * Copyright (c)2016,烟台大学计算机与控制工程学院
  3. * All rights reserved.
  4. * 文件名称:wu.cpp
  5. * 作    者:武昊
  6. * 完成日期:2016年10月27日
  7. * 版 本 号:v1.0
  8. *问题描述:一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。
  9. 从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后
  10. 一只出圈的猴子为大王。输入m和n,输出猴子离开圈子的顺序,从中也可以
  11. 看出最后为大王是几号猴子。
  12.         要求采用数组作为存储结构完成。
  13. *输入描述:猴子个数m及数到第n个。
  14. *程序输出:出圈顺序。
  15. */
法一:
  1. #include <stdio.h>
  2. #define MaxSize 8
  3. void king(int m,int n)
  4. {
  5. int p[MaxSize];
  6. int i,j,t;
  7. for (i=0; i<m; i++)         //构建初始序列,记录m只猴子在圈中
  8. p[i]=1;
  9. 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. int main()
  25. {
  26. int m,n;
  27. scanf("%d %d", &m, &n);
  28. king(m,n);
  29. return 0;
  30. }

法二:

  1. #include <stdio.h>
  2. #define MaxSize 8
  3. void king(int m,int n)
  4. {
  5. int p[MaxSize];
  6. int i,s=0,t;
  7. for (i=0; i<m; i++)         //构建初始序列,记录m只猴子在圈中
  8. p[i]=1;
  9. t=0;                        //首次报数的起始位置为0,是第1只猴子
  10. printf("出列顺序:");
  11. for (i=1; i<=m; )       //循环要执行m次,有m个猴子要出圈
  12. {
  13. s=s+p[t]; //s累加中,猴子在圈时加1相当于报数,出圈后是加0相当于没有报数。
  14. if(s==n)
  15. {
  16. p[t]=0;   //猴子出圈
  17. printf("%d ",t+1);      //输出出圈猴子的编号
  18. s=0;   //重新开始累加
  19. i++;   //报数的猴子加1
  20. }
  21. t=(t+1)%m;    //再报数时,从下一只猴子开始
  22. }
  23. printf("\n");
  24. }
  25. int main()
  26. {
  27. int m,n;
  28. scanf("%d %d", &m, &n);
  29. king(m,n);
  30. return 0;
  31. }

法三:

  1. #include <stdio.h>
  2. #define MaxSize 100
  3. void king(int m,int n)
  4. {
  5. int p[MaxSize];
  6. int i,j,t;
  7. for (i=0; i<m; i++)         //构建初始序列,记录m只猴子在p[0]~p[m-1]中
  8. p[i]=i+1;
  9. t=0;                        //首次报数的起始位置为0
  10. printf("出列顺序:");
  11. for (i=m; i>=1; i--)        //循环要执行m次,有m个猴子要出圈;共有i从m开始递减至1,i还表示在圈中猴子的数目
  12. {
  13. t=(t+n-1)%i;            //从t开始数1,其后第n-1个将数到n,t加n-1用%i取余,目的是到达最后一个猴子可以折回去继续数
  14. printf("%d ",p[t]);     //编号为p[t]的元素出列
  15. for (j=t+1; j<=i-1; j++)//后面的元素前移一个位置,删除了编号为p[t]的猴子
  16. p[j-1]=p[j];
  17. }
  18. printf("\n");
  19. }
  20. int main()
  21. {
  22. int m,n;
  23. scanf("%d %d", &m, &n);
  24. king(m,n);
  25. return 0;
  26. }

运行结果:

总结:
可以用数组解决问题, 用数组元素保存猴子的编号,一只猴子出圈,执行从数组中删除元素的操作,以此重复。

第九周项目1——猴子选大王(数组版)相关推荐

  1. 数据结构上机实践第四周项目5 - 猴子选大王

    数据结构实践--猴子选大王 首先呢,小普及一下 读者:难道你当我不知道 读者想对小编说: 进入正题,项目要求如下: 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只 ...

  2. 第八周实践项目6 猴子选大王(数组版)

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目6-一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m ...

  3. 第四周实践项目5 猴子选大王(循环链表)

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目5-一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m ...

  4. 第四周项目5——猴子选大王

    /* * Copyright (c++) 2016 烟台大学计算机学院 * All right reserved. * 文件名称:wu.cpp * 作    者: 武昊 * 完成日期:2016年9月2 ...

  5. 数据结构实践——猴子选大王(数组版)

    本文针对数据结构基础系列网络课程(5): 数组与广义表的实践项目. [项目 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数 ...

  6. 主元排序法c语言程序,C语言算法竞赛入门(二)---数组元素移动 、排序问题 、猴子选大王问题...

    数组元素移动 [问题描述]调整输入数组A[0..n],将其分为两部分,左边所有元素为奇数,右边所有元素为偶数 [输入形式]a0,b1,b2,a1,a2,b3,a3,a4 [输出形式]a0,a1,a2, ...

  7. 用js:字符串数组中每一项的长度。将字符串数组用 | 符号分割。有序数组插入排序插入数组。猴子选大王

    1.字符串数组中每一项的长度 代码: <script> var arr = ['hello', 'world!', 'nice', 'to', 'meet', 'you'];var new ...

  8. c语言-猴子选大王-约瑟夫问题(队列,链表,数组)

    猴子选大王 前言:初读此题,根据题意,顺势想到了用刚学的数据结构中的循环队列及循环链表,便想借此来熟练一下新学知识. 题目描述: 一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位 ...

  9. 猴子选大王——CSharp数组

    博客上看了一个问题--猴子选大王 看得有些晕晕乎乎的,我就尝试自己写个方法备忘,谢谢 原题引述: 一群猴子,编号是1,2,3 -n,这群猴子(n个)按照1至n的顺序围坐一圈.从第1只开始数,每数到第m ...

最新文章

  1. GCC 链接 xxx:No such file or directory 及运行可执行文件 error while loading shared libraries: xxx.so 解决方案
  2. 实现linux作为server时与windows间的数据同步
  3. 免费下载田志刚《呼叫中心知识库心得》电子书
  4. ×××生成算法的分析
  5. 大盘点|卷积神经网络必读的 100 篇经典论文,包含检测 / 识别 / 分类 / 分割多个领域
  6. Cloud Foundry Session Affinity(Sticky Session)的实现
  7. 服务器虚拟化的意思,服务器虚拟化存储的好处以及作用
  8. ubuntu linux开机启动自动加载ko驱动程序_一文讲透 CentOS 开机流程
  9. 01-nodeJs下载及安装
  10. java中将Excel转图片
  11. Linux学习-菜鸟教程知识(一)
  12. No handler found for OPTIONS /lca/lcaplan/lcaplanprocess/list
  13. 北理工计算机学院奖学金公示,计算机学院2020年研究生国家奖学金拟推荐人选公示通知...
  14. KendoUI学习笔记
  15. #踩过的坑# 企业微信被封了怎么办?
  16. 一年当中几月份买车最合适?什么时候最便宜?
  17. 【.Net实用方法总结】 整理并总结System.IO中FileInfo类及其方法介绍
  18. 关于Qt中的翻译问题
  19. 511遇见安卓手机投屏支持一键转无线群控
  20. teamviewer13安装个人免费版

热门文章

  1. 微信昵称特殊字符存储 PHP MYSQL
  2. 给小朋友讲故事——谈谈杨振宁先生的贡献和三大争议点,第二部分
  3. TinyMCE是什么?
  4. GDKOI2016 魔卡少女
  5. 帝国cms后台登陆显示Cann‘t connect to DB 解决方法
  6. BU客户端发布新版本,删除了BSV协议功能
  7. 单招计算机面试技巧和注意事项,单招面试时的六大注意事项
  8. 线上VR看房是什么体验,vr看房有哪些优势?
  9. 老百姓买房的十大死穴 别被一套房拴住一辈子
  10. 【Android】ImageView的maxWidth,maxHeight的使用