C语言狼追兔子问题
一只兔子躲进了 10 个环形分布的洞的某一个,狼在第一个洞没有找到兔子,就隔一个洞,到第三个洞去找,也没有找到,就隔两个洞,到第六个洞去找,以后每次多隔一个洞 去找兔子……这样下去,结果一直找不到兔子,请问:兔子可能躲在哪个洞中?
由题目可知,狼没有找到兔子,因此该算法会一直持续下去。除此之外,还需要注意的是,在 10 个洞之后,比如狼去找第十五个洞,但第十五个洞是不存在的,因此我们用 15 对 10 求余,得到的数字才是洞的标示。
① 数组名的命名规则遵守标识符的命名规则。
② 常量表达式指出数组的长度,当长度为 n 时,即数组为 n 个元素,数组元素下标范围只能是 0~(n—1),即数组中第一个元素的下标为 0,数组中最后一个元素的下标应该是(n—1)。
③ 常量表达式可以包含常量和符号常量,但是不能包含变量。
④ 在定义数组的说明中,可以有多个数组说明符,用逗号隔开即可。
(2) 一维数组的引用说明:
① 数组下标可以是整型常量、整型变量或者整型表达式,初始值为 0。
② 一个数组元素引用的实质就是一个变量名的引用,每一个数组元素代表内存中的一个存储单元,具有与相同类型单个变量一样的属性,可以对它进行赋值且参与各种运算,一个数组占有一段连续的存储单元。
③ 在 C 语言中,数组不能作为一个整体参加数据运算,只能对单个元素进行计算。
算法思想
对于本实例中提到的问题,虽然是“兔子可能躲在哪个洞中”,但是在考虑算法时,需要知道的是狼会去哪个洞找兔子,狼第一次去的洞是第一个(表示为 pos1),第二次去的是第三个(pos3),把它去的洞的代码用数字表示出来,可以推导出狼去的洞的代码是: pos(i+1)=pos(i)+i+1。由题目可知,狼没有找到兔子,因此该算法会一直持续下去。除此之外,还需要注意的是,在 10 个洞之后,比如狼去找第十五个洞,但第十五个洞是不存在的,因此我们用 15 对 10 求余,得到的数字才是洞的标示。
程序代码
#include <stdio.h> int main() { int i; bool pos[10]={0}; int lang=0; for(i=0;i<100;i++) { pos[lang]=true; lang++; lang+=i; lang=lang%10; } for(i=0;i<10;i++) if(!pos[i]) printf("兔子可能在第%d洞中\n",i+1); return 0; }
调试运行结果
通过上面的算法分析,狼在找兔子的过程中,为了达到找到兔子的目的,同时为了设计需要,增加了循环次数,最终程序的结果如下所示:
兔子可能在第3洞中
兔子可能在第5洞中
兔子可能在第8洞中
兔子可能在第10洞中
总结
(1) 一维数组定义时需要注意的规则:① 数组名的命名规则遵守标识符的命名规则。
② 常量表达式指出数组的长度,当长度为 n 时,即数组为 n 个元素,数组元素下标范围只能是 0~(n—1),即数组中第一个元素的下标为 0,数组中最后一个元素的下标应该是(n—1)。
③ 常量表达式可以包含常量和符号常量,但是不能包含变量。
④ 在定义数组的说明中,可以有多个数组说明符,用逗号隔开即可。
(2) 一维数组的引用说明:
① 数组下标可以是整型常量、整型变量或者整型表达式,初始值为 0。
② 一个数组元素引用的实质就是一个变量名的引用,每一个数组元素代表内存中的一个存储单元,具有与相同类型单个变量一样的属性,可以对它进行赋值且参与各种运算,一个数组占有一段连续的存储单元。
③ 在 C 语言中,数组不能作为一个整体参加数据运算,只能对单个元素进行计算。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频