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


 

原文地址:https://www.cnblogs.com/AWCXV/p/7632490.html