【2007】聪明的兔子
Time Limit: 3 second
Memory Limit: 2 MB
聪明的兔子:围绕着山顶有10个洞,一只狐狸和一只兔子各住一个洞。狐狸总想吃掉兔子。一天兔子对狐狸说:“你想吃我有一个条件,先把洞从1~10编上号,你从10号洞出发,先到1号洞找我;第二次隔1个洞找我,第三次隔2个洞找我,以后依此类推,次数不限。若能找到我,你就可以饱餐一顿。不过在没有找到我以前不能停下来。”狐狸满口答应就开始找了,它从早到晚找了1000次洞,累得昏了过去也没有找到兔子。请问,免子躲在几号洞里?
Input
输入文件中只一个数字,表示狐狸查找洞的次数(20<=n<=32767)。
Output
输出兔子躲藏的洞号
Sample Input
1000
Sample Output
2 4 7 9
【题解】
要注意这10个洞是构成了一个环。然后一个个洞for就可以了。3s的时间足够了。。
【代码】
#include <cstdio>
const int MAXN = 10;
int n;
bool bo[10+10];
void input_data()
{
for (int i = 1;i <= 10;i++) //先初始化 每个洞都可以
bo[i] = true;
scanf("%d",&n);
}
void get_ans()
{
int j = 1,k = 0;
bo[1] = false;
for (int i = 1;i <= n-1;i++) //k用来表示隔几个洞
{
k++;
for (int m = 1;m <= k+1;m++)
{
j++; //一个个加 大于10就变成1 这样做比较方便。简单。
if (j > 10 ) j = 1;
}
bo[j] = false; //这个洞口置为false
}
}
void output_ans()
{
int number = 0,a[MAXN+10];
for (int i = 1;i <= 10;i++)//先把洞口的数目统计出来 然后再一个个输出这样最后就不会输出空格
if (bo[i])
a[++number] = i;
for (int i = 1;i <= number-1;i++)
printf("%d ",a[i]);
printf("%d",a[number]);
}
int main()
{
input_data();
get_ans();
output_ans();
return 0;
}

浙公网安备 33010602011771号