一道狐狸找兔子的题

来源:互联网 发布:裁决之镰淘宝 编辑:程序博客网 时间:2024/04/30 05:56

Ø围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:可以,但必须先找到我,我就藏身于这十个洞中的某个洞。你从1号洞找,下次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找,再隔3以后在这个圆圈中如此类推,次数不限。但狐狸从早到晚进进出出了1000次,仍没有找到兔子。
Ø问兔子究竟藏在哪个洞里?
自己编的程序:
#include<stdio.h>
#define NUM 10
const int count=1000;
void main(void)
{
int i;
int curr = 0;
int hole[10] = {0};
for(i=1;i<=count;++i)
{
hole[curr] = 1;
curr += (i+1);
if((curr)>9)
curr=curr%10;
}
printf("兔子可能藏在以下洞里:/n");
for(i=0;i<NUM;i++)
{
if(hole[i]==0)
printf("第%d个洞/n",(i+1));
}
}
下面是班上一个同学写的,挺有意思的,和大家分享
//运行结果说明:
//1.在控制台中Y表示“有可能在这个洞”,N表示“狐狸已来过”
//2.在D盘根目录生成一个FindSteps.txt 里边有查找过程的演示
//  
//梁鑫辉
//2011年4月13日
//
//
#include <stdio.h>
char hole[10];
int Holes()
{
int i=0;
int count=10;
for(i=0;i<10;i++)
{
printf("  %c",hole[i]);
if(hole[i]=='N') count--;
}
printf("/t剩余:%d个洞/n",count);
return count;
}
void main()
{
int i,j;
int n=2;
int current=0;
FILE *fs;
if(NULL==(fs=fopen("d://FindSteps.txt","w")))
{
printf("创建文件失败!");
getch();
exit(1);
}
//每个洞都标记为Y,表示“兔子可能在这里”
for(i=0;i<10;i++)
hole[i]='Y';
fprintf(fs,"下面演示了找兔子的过程:/n");
fprintf(fs,"次数一 二 三 四 五 六 七 八 九 十/n");
for(i=0;i<1000;i++)
{
hole[current]='N';
//打印到文件
fprintf(fs,"%d/t",i+1);
for(j=0;j<current;j++)
fprintf(fs,"   ");
fprintf(fs,"×/n");
//输出到屏幕
Holes();
current+=n;
n++;
if(current>9) current=current%10;
}
fprintf(fs,"/n*************************************/n");
fprintf(fs,"最终一 二 三 四 五 六 七 八 九 十/n");
fprintf(fs,"    ");
for(i=0;i<10;i++)
{
if(hole[i]=='N')
fprintf(fs,"× ");
elsefprintf(fs,"   ");
}
fclose(fs);
}
注:以上程序均无错误,在vs2005上运行通过

原创粉丝点击