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。见代码注释。
2.运行结果
3.知识总结
数组的运用。
4.学习心得
在一个数组中,数组中用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.学习心得
相关文章推荐
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#动态调整数组大小的方法
- 详解Lua中的数组概念知识
- Lua教程(七):数据结构详解
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- C#数据结构揭秘一
- Ruby简明教程之数组和Hash介绍
- 数据结构之Treap详解
- C语言查找数组里数字重复次数的方法