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; }