狐狸抓兔子问题求指教

Lonely 2012-03-08 09:28:32
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,d,i,j,num,mod,str[1000],end,cishu,a[4],m;
scanf("%d",&d);
for(i=0; i<d; i++)
{
scanf("%d",&n);
if(n%2==0)
end=2*n;
else
end=n;
num=n;
for(j=0; j<end; j++)// 取余数
{
mod=(num+j)%n;
num=num+j;
str[j]=mod;
if(str[j]==0)
str[j]=n;
printf("%d ",str[j]);
}
printf("\n");

a[2]=0;
for(j=0; j<end; j++)//标号进行处理
{
m=0;
for(cishu=0; cishu<n; cishu++)
{
if(str[j]==cishu+1)//如果次数与编号相等。
{
str[j]=1;
break;
}
else//不相等** 哪位大虾知道为什么这个判断哪里出了问题
{
m++;
printf("%d ",m);
if(m>n-1)
{
str[j]=0;
a[2]++;
}
else
continue;
}
}
}
printf("\n");
for(j=0; j<end; j++)
{
printf("%d ",str[j]);
}
printf("\n");
if(a[2]==0)
printf("no safe cave\n");
else if(a[2]!=0)
{
for(j=0; j<n; j++)
{
if(str[j]==0)
printf("%d ",j+1);
}
printf("\n");
}
}
return 0;
}
...全文
564 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hale丶 2012-11-25
  • 打赏
  • 举报
回复
/**************************************************************************** 围绕山顶有10个洞,一只兔子和一只狐狸相遇了,狐狸要吃兔子. 兔子对狐狸说:你可以吃掉我,但是必须先找到我,我就藏在这10个洞中 你先到1号洞找我,若没找到,则第二次到隔一个洞找我,即3号洞,第三次隔两个洞找我 即6号洞.以后以此类推,找到就可以吃掉我。 狐狸答应了,但是狐狸进进出出1000次后,也没找到兔子,问兔子在哪洞 *****************************************************************************/ #include<stdio.h> #define N 10//假设有十个洞 void main() { int a[N]={0},i,k=0;//定义"1"代表狼进去过"0"代表狼没进去过. for(i=0;i<1000;) { a[k]=1; i++; k=(k+i+1)%N;//用K表示出狼依次要进入的洞的号码"0 ~ N-1" } printf("兔子可以在"); for(i=0;i<N;i++) if(a[i]==0)//最后还是0的 表示这个洞狼没进去过,是安全的. printf("%2d ",i+1); printf("号洞中的任意一个\n"); }
Lonely 2012-03-09
  • 打赏
  • 举报
回复
这是原题

1. 小白兔智斗狐狸
Description
下面就让我们来看看这场狐狸与兔子的角逐吧!在某个山上有n个洞,住着一只狐狸和一只兔子,这n个洞呈圆周形排列,分布在山的周围,每个洞之间有一定的距离。狐狸总想去捉吃兔子。有一天,兔子远远地看见了狐狸,便对狐狸说:“这样吧,我们玩个游戏,把n个洞依次编成1至n号,你住的洞编号为第n号洞,我藏在另外的某个洞里。你从自己的洞出发,沿着一个方向走,第一次走一个间隔(相邻的两洞之间为一个间隔),进入1号洞寻找我,第二次走2个间隔,进3号洞寻找我,依此类推,次数不限,如果我被你找到了,你就甘愿成为你的美餐,如何?。狐狸心想,不限次数,只要我努力找,总可以找到小白兔的。结果狐狸找呀找呀,找了三天三夜也没有找到小白兔。请你帮小白兔一个忙,如果给定洞的个数n,它应该躲在哪些洞里才是永远安全的。
Input
第一行包含一个整数k(1<=k<=100),表示测试用例的个数。对于每个测试用例的输入占1行,包含一个整数n (3<= n<=1000)。
Output
请将安全的洞号从小到大依次输出,洞号之间用空格隔开,最后一个洞号之后没有空格但有回车。如果没有洞是安全的,则输出”no safe caves”,每个测试用例的输出各占一行。
Sample Input
2
10
4
Sample Output
2 4 7 9
no safe caves
HINT
注意利用余数的同余性质:
① a≡ b (mod n) => a+c ≡ b+c (mod n)
② a≡ b (mod n), 且c≡ d (mod n) => ac≡ bd (mod n
qixing1115 2012-03-08
  • 打赏
  • 举报
回复
要有描述
ouyh12345 2012-03-08
  • 打赏
  • 举报
回复
什么问题?
zhiy_wis 2012-03-08
  • 打赏
  • 举报
回复
懒得看~没有注释的代码~
sparklxd001 2012-03-08
  • 打赏
  • 举报
回复
题目都没有
goldbeef 2012-03-08
  • 打赏
  • 举报
回复
把原题贴上来
Lonely 2012-03-08
  • 打赏
  • 举报
回复
问题出在这一节,不进行分支判断,一直执行str[i]=1语句
a[2]=0;
for(j=0; j<end; j++)//标号进行处理
{
m=0;
for(cishu=0; cishu<n; cishu++)
{
if(str[j]==cishu+1)//如果次数与编号相等。
{
str[j]=1;
break;
}
else//不相等** 哪位大虾知道为什么这个判断哪里出了问题
{
m++;
printf("%d ",m);
if(m>n-1)
{
str[j]=0;
a[2]++;
}
else
continue;
}
}
}

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧