| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5326 人关注过本帖
标题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的 ...
只看楼主 加入收藏
kiss_白水
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-10-6
收藏
 问题点数:0 回复次数:15 
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
我自己写的程序如下,编译没问题,但得不到正确答案,希望帮忙纠错

#include<stdio.h>
#define N 20
int main()
{
    int i,s,a[N+1];
    a[0]=0;
    for(i=1;i<=N;i++)
    a[i]=i;
    s=0;
    for(i=1;i<=N;i++) {
    if(a[i]!=0)
      { s++;
        if(s%3==0) a[i]=0; }
    if(i==N&&s==1) break;
    if(i==N) {i=0;s=s%3;}
    }
    for(i=1;i<=N;i++)
    if(a[i]!=0)
    printf("%d\n",i);
    scanf(" ");
    return 0;
}
搜索更多相关主题的帖子: 圈子 顺序 排号 
2008-10-20 20:02
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
你怎么知道得出的不是正确答案??

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-10-20 20:14
kiss_白水
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-10-6
收藏
得分:0 
运行之后什么都没有,只是光标在那闪
2008-10-20 20:18
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
#include<stdio.h>
#define N 20
main()
{
     int i,j,k,n=20;
     int a[N];
     for(i=0;i<N;i++)
       a[0]=i+1;
     i=0;
     j=0;
     k=0;
     while(j<N-1)
     {
       if(a[i]!=0)k++;
       if(k==3)
       {
           a[i]=0;
           k=0;
           j++;

       }
       i++;
       if(i==N)i=0;

     }
     for(i=0;i<N;i++)
    {
       if(a[i]!=0)
         printf("%d\n",i+1);
     }
}

[[it] 本帖最后由 liyanhong 于 2008-10-20 21:13 编辑 [/it]]

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-10-20 21:10
kiss_白水
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-10-6
收藏
得分:0 
谢谢了
但我想问我的算法错在哪里
2008-10-20 21:13
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
//for(i=1;i<=N;i++)      
//if(i==N) {i=0;s=s%3;}
你不觉别扭吗

//你的程序格式写的很糟糕

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-10-20 21:26
hgrhgy
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-22
收藏
得分:0 
个人建议用链表操作
还有版主说的太对了。。
2008-10-20 21:37
kiss_白水
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-10-6
收藏
得分:0 
谢了
格式我会注意的

重点是我想知道错在哪,该怎么改
2008-10-20 21:52
nwpu063417
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:428
专家分:28
注 册:2007-5-11
收藏
得分:0 
建立一个循环链表就可以了

2008-10-20 21:59
hgrhgy
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-22
收藏
得分:0 
算法没错吧。。其实你那个跳出条件有问题。。。。把他放在第一行
if(i==N&&s==1) break;  这个。。因为你到最后一个的时候你先改变S的值在判断了。。这个算是BUG吧。。
最后面到20时。。。I=20 S=1 由于a[20]是不等与零的。然后就跳入
if(a[i]!=0)
{
    s++;
    if(s%3==0)
    a[i]=0;
}改变了S值然后就死循环了- -!
2008-10-20 22:20
快速回复:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028691 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved