实验描述

狐狸逮兔子实验

(一)问题描述

围绕着山顶有10个圆形排列的洞,互利要吃兔子,兔子说:”可以,但必须找到我,我就藏于这10个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第二次隔2个洞(即6号洞)找,以后如此类推,次数不限.”但狐狸从早到晚进进出出了1000次,仍没有找到兔子.问:兔子究竟藏在那个洞里?

(二)问题分析

这实际上是一个反复查找线性表的过程.

定义一个顺序表,用具有10个元素的顺序表来表示这10个洞.每个元素表示围绕山顶的一个洞,下标为洞的编号.对所有洞设置初始标志为1,然后通过1000次循环,对每次所进之洞修改标志为0,最后输出标志为1的洞,即兔子藏身的洞.

(三)问题要求

1.设计一种存储方式用于存储山洞,元素的下标表示山洞的编号,元素的值为1表示狐狸没有进过山洞,为0表示狐狸进过该山洞.

2.为保持程序的通用性,山洞的数目和狐狸进出山洞的次数不一定为题设的10和1000,可由用户从键盘输入.

3.要求编写函数模拟狐狸逮兔子的过程,并输出兔子可能的藏身之处.

 实现代码

#include<bits/stdc++.h>
using namespace std;

const int N=1e4+7;
int n, num, hole[N];//n为洞的个数,num为狐狸进出山洞的次数

void inif(int n){
	for(int i = 1; i <= n; ++i){
		hole[i]=1;
	}
}

int main(){
	cout<<"请输入山洞的个数和狐狸进出山洞的次数:"<<endl;
	cin >> n >> num; //输入山洞的个数和狐狸进出山洞的次数
	int book = 0;
	inif(n);
	for(int i=1; i <= num; ++i){
		book = (book+i)%n;
		if (book == 0) book = n;
		hole[book] = 0;
	}
	cout<<"兔子可能的藏身之所是:"<<endl;
	for(int i = 1; i <= n; ++i){
		if(hole[i]==1) {
			cout<<i;
			cout<<"号洞"<<endl;
		}
	}
	cout<<endl;
	return 0;
}

效果图:

 

点击阅读全文
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐