狼追兔子问题(10分)
题目内容:
一只兔子躲进了 10 个环形分布的洞的某一个,狼第一次在第一个洞没有找到兔子,就隔一个洞,再到第三个洞去找,也没有找到,就隔两个洞,到第六个洞去找,以后每次多隔一个洞 去找兔子……这样下去,结果一直找不到兔子,编程输出第n次找洞时,兔子可能藏在哪几个洞中?
提示:对于本实例中提到的问题,虽然是“兔子可能躲在哪个洞中”,但是在考虑算法时,需要知道的是狼会去哪个洞找兔子,狼第一次去的洞是第一个(表示为 pos1),第二次去的是第三个(pos3),把它去的洞的代码用数字表示出来,可以推导出狼去的洞的代码是: pos(i+1)=pos(i)+i+1。
由题目可知,狼没有找到兔子,因此该算法会一直持续下去。除此之外,还需要注意的是,在 10 个洞之后,比如狼去找第十五个洞,但第十五个洞是不存在的,因此我们用 15 对 10 求余,得到的数字才是洞的标示。
输入格式:
输入找洞的次数n
输出格式:
列出所有兔子可能在的洞,一行一个洞;注意:从开始找的那个洞看作是第一个洞,依次类推
输入样例1:
2
输出样例1:
2
4
5
6
7
8
9
10
输入样例2:
4
输出样例2:
2
4
5
7
8
9
代码如下:
#include<iostream>
using namespace std;
int position(int n)
{
int pos=(n+1)*n/2;
if(pos%10==0)return 10;//正好到第十个位置,但是求余得0,需要特殊处理
else
return pos%10;
}
int main()
{
int n,i,a[11]={0};
cin>>n;
for(i=1;i<=10;i++)
{
a[i]=i;
}
while(1)
{
a[position(n)]=0;
n--;
if(!n)break;
}
for(i=1;i<11;i++)
{
if(a[i]==0)continue;
cout<<a[i]<<endl;;
}
return 0;
}