kiss_白水 发布留言 2008-10-20 20:02
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
我自己写的程序如下,编译没问题,但得不到正确答案,希望帮忙纠错
#include
#define N 20
int main()
{
int i,s,a[N+1];
a[0]=0;
for(i=1;i<=N;i++)
a!=0)
{ s++;
if(s%3==0) a!=0)
printf("%d\n",i);
scanf(" ");
return 0;
}liyanhong 发布留言 2008-10-20 20:14
你怎么知道得出的不是正确答案??kiss_白水 发布留言 2008-10-20 20:18
运行之后什么都没有,只是光标在那闪liyanhong 发布留言 2008-10-20 21:10
#include
#define N 20
main()
{
int i,j,k,n=20;
int a[N];
for(i=0;i a[0]=i+1;
i=0;
j=0;
k=0;
while(j {
if(a=0;
k=0;
j++;
}
i++;
if(i==N)i=0;
}
for(i=0;i {
if(a 本帖最后由 liyanhong 于 2008-10-20 21:13 编辑 [/it]]kiss_白水 发布留言 2008-10-20 21:13
谢谢了
但我想问我的算法错在哪里liyanhong 发布留言 2008-10-20 21:26
//for(i=1;i<=N;i++)
//if(i==N) {i=0;s=s%3;}
你不觉别扭吗
//你的程序格式写的很糟糕hgrhgy 发布留言 2008-10-20 21:37
个人建议用链表操作[em01]
还有版主说的太对了。。kiss_白水 发布留言 2008-10-20 21:52
谢了
格式我会注意的
重点是我想知道错在哪,该怎么改nwpu063417 发布留言 2008-10-20 21:59
建立一个循环链表就可以了hgrhgy 发布留言 2008-10-20 22:20
算法没错吧。。其实你那个跳出条件有问题。。。。把他放在第一行
if(i==N&&s==1) break; 这个。。因为你到最后一个的时候你先改变S的值在判断了。。这个算是BUG吧。。
最后面到20时。。。I=20 S=1 由于a[20]是不等与零的。然后就跳入
if(a=0;
}改变了S值然后就死循环了- -!huangch 发布留言 2008-10-20 22:33
其实用数学的方法更好;用链表与数组都将运行的时间变得很慢的广陵绝唱 发布留言 2008-10-20 23:45
回复 4# liyanhong 的帖子
错了,不仅代码上有错误,而且结果也是错的。
面壁……我一定给你送饭。广陵绝唱 发布留言 2008-10-20 23:45
回复 11# huangch 的帖子
麻烦您,能不能把算法指点一下?谢谢。liyanhong 发布留言 2008-10-20 23:46
[un]广陵绝唱[/un] 在 2008-10-20 23:45 的发言:[/bo]
错了,不仅代码上有错误,而且结果也是错的。
面壁……我一定给你送饭。 |
[em04] [em04] 会改正的广陵绝唱 发布留言 2008-10-20 23:48
回复 14# liyanhong 的帖子
对不起,结果应该没错。是20。刚才是我弄错了。不过你的赋值中的数组下标确实写错了。
页: [1]