小黄练编程 发表于 2021-12-22 20:27:17

这程序错哪了?结果输不出啊,猴子选大王的题目。

{:10_266:}{:10_266:}#include<stdio.h>
main()
{
        int a,N,number,count;
        scanf("%d",&N);
        number=N;
        for(int i=0;i<N;i++)
        {
                a=1;
        }
        while(number>1)
        {
                for(i=0;i<N;i++)
                {
                        if(a==0)
                        continue;
                        count++;
                        if(count==3)
                        {
                                number--;
                                count=0;
                                a=0;
                        }
                }
        }
        for(i=0;i<N;i++)
        {
                if(a!=0)
                printf("%d\n",a);
        }
}

jackz007 发表于 2021-12-22 20:58:21

      把题目说明和要求贴一下

小黄练编程 发表于 2021-12-22 21:46:29

jackz007 发表于 2021-12-22 20:58
把题目说明和要求贴一下

我对照好多遍了,思路确实是这样,但就是不知道为何输不出结果,不知道程序错哪了{:10_266:}{:10_266:}{:10_266:},最起码得出来个结果啊。{:10_266:}

小黄练编程 发表于 2021-12-22 21:49:02

jackz007 发表于 2021-12-22 20:58
把题目说明和要求贴一下

有时候编译啥的都没错,但运行时就没用,比如有时候scanf("%d",&a);少了&,{:10_266:}

小黄练编程 发表于 2021-12-22 21:50:03

jackz007 发表于 2021-12-22 20:58
把题目说明和要求贴一下

题目n个猴子围成一圈,从第1个猴子开始重复数一二三,数到三的猴子从圈子中出来,最后剩下的一个猴子就是大王。编程模拟此过程,输出猴子出圈的编号次序和大王的编号。

jackz007 发表于 2021-12-22 22:18:10

本帖最后由 jackz007 于 2021-12-22 22:25 编辑

小黄练编程 发表于 2021-12-22 21:50
题目n个猴子围成一圈,从第1个猴子开始重复数一二三,数到三的猴子从圈子中出来,最后剩下的一个猴子就 ...
      就是约瑟夫环问题
#include <stdio.h>

int main(void)
{
      int d , e , i , n , m                         ;
      scanf("%d" , & n)                                  ;
      for(e = i = 0 ; i < n ; i ++) d = i + 1         ;
      for(m = n , i = 0 ; m > 1 ; i ++) {
                if(d) {
                        e ++                               ;
                        if(! (e % 3)) {
                              if(m < n) printf(" , ")    ;
                              printf("%d" , (i % n) + 1) ;
                              d = 0               ;
                              m --                     ;
                        }
                }
      }
      printf("\n")                                       ;
      for(i = 0 ; i < n ; i ++) if(d) break         ;
      printf("The monkey king is %d\n" , d)         ;
}
      编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
41
3 , 6 , 9 , 12 , 15 , 18 , 21 , 24 , 27 , 30 , 33 , 36 , 39 , 1 , 5 , 10 , 14 , 19 , 23 , 28 , 32 , 37 , 41 , 7 , 13 , 20 , 26 , 34 , 40 , 8 , 17 , 29 , 38 , 11,25 , 2 , 22 , 4 , 35 , 16
The monkey king is 31

小黄练编程 发表于 2021-12-22 23:36:41

jackz007 发表于 2021-12-22 22:18
就是约瑟夫环问题

      编译、运行实况:

那我上面哪出了问题,不可能结果都出不来吧,就算是个乱码也算结果。但有时输入时,像卡死了一样,不给出结果。{:10_266:}{:10_266:}。就像我说的scanf少了&。还有if(),括号中只打一个=。他就运行不了,其他就没问题。
还有的情况,第一步查错没问题,结果建立就出现一个错误,每次都得立马关了编译器,然后重开,在复制回去按一遍,{:10_266:}{:10_266:}{:10_266:}{:10_266:}
能教教我这些知识吗,大哥{:10_266:}{:10_266:}

jackz007 发表于 2021-12-22 23:55:08

小黄练编程 发表于 2021-12-22 23:36
那我上面哪出了问题,不可能结果都出不来吧,就算是个乱码也算结果。但有时输入时,像卡死了一样,不给出 ...

#include<stdio.h>
main()
{
      int a , i , N , number , count                     ;
      scanf("%d" , & N)                                       ;
      number = N                                                ;
      for(i = 0 ; i < N ; i ++) a = 1                        ;
      while(number > 1)
      {
                for(i = 0 ; i < N ; i ++)
                {
                        if(a)
                        {
                              count ++                        ;
                              if(count == 3)
                              {
                                        number --               ;
                                        count = 0               ;
                                        a = 0                  ;
                              }
                        }
                }
      }
      for(i = 0 ; i < N ; i ++) if(a) printf("%d\n" , i + 1) ;
}

小黄练编程 发表于 2021-12-23 09:54:58

jackz007 发表于 2021-12-22 23:55


你这代码跟我情况一样啊,输进去一个数,按几下回车,也是没反应{:10_266:}{:10_266:}{:10_266:}

傻眼貓咪 发表于 2021-12-23 10:53:48

本帖最后由 傻眼貓咪 于 2021-12-23 10:56 编辑

#include <stdio.h>

int main(){
        int n, m = 3;
        scanf("%d", &n);
        int arr;
        for(int i = 0; i < n; i++) *(arr+i) = i+1;
        for(int c, j, i = c = j = 0; j < n; i++){
                if(*(arr+(i%n))){
                        c++;
                        if(c == m){
                                c %= m;
                                if(j < n-1) printf("%d ", *(arr+(i%n)));
                                else printf("\nThe Monkey King is: %d", *(arr+(i%n)));
                                *(arr+(i%n)) = 0;
                                j++;
                        }
                }
        }
        return 0;
}

zxy0107 发表于 2021-12-23 17:38:18

楼主的代码是在for循环里定义的i 之后的i 和a应该都会报错啊。。。你的编译器不会报错吗

小黄练编程 发表于 2021-12-23 18:06:35

zxy0107 发表于 2021-12-23 17:38
楼主的代码是在for循环里定义的i 之后的i 和a应该都会报错啊。。。你的编译器不会报错吗

你在讲啥兄弟???是不是知道哪里出了问题,赶紧指点下啊{:10_266:}

zxy0107 发表于 2021-12-23 19:33:24


你的i是在for循环里定义的 出了for循环就不能用了 我只知道这一个原因 但在我电脑上是报错的 程序都无法运行

zxy0107 发表于 2021-12-23 19:40:25

如果在前边定义了i=0如图,就能输出结果,但结果也不对,你的程序得到的结果永远是1,因为你的a初值是1,后来只有一个是1,其余都是0了,最后输出的应该是i+1的值吧
我也只是小白,如果说错了见谅{:5_91:}

zxy0107 发表于 2021-12-23 19:42:25

8楼的代码我这是可以运行的,是正解(我可能只是解释了一下8楼帮你改的代码

小黄练编程 发表于 2021-12-23 21:46:45

zxy0107 发表于 2021-12-23 19:42
8楼的代码我这是可以运行的,是正解(我可能只是解释了一下8楼帮你改的代码

确实,我后面才反应过来,我这需要把最后的a改为i。但是为什么输不出结果啊,没点动静,按了几下回车。{:10_266:}{:10_266:}{:10_266:}

小黄练编程 发表于 2021-12-23 21:51:29

zxy0107 发表于 2021-12-23 19:42
8楼的代码我这是可以运行的,是正解(我可能只是解释了一下8楼帮你改的代码

#include<stdio.h>
int main()
{
        inta;
        int num,n,count=0;
        printf("请输入猴子数量=");
        scanf("%d",&n);
        num=n;
        for(int i=1;i<n;i++)
        {
                a=1;
        }
        while(num>1)
        {
                for(i=1;i<n;i++)
                {
                        if(a==0)
                        continue;
                        count++;
                        if(count==3)
                        {
                                a=0;
                                num--;
                                count=0;
                        }
                }
        }
        for(i=1;i<n;i++)
        {        if(a!=0)
                printf("%d\n",i);
        }
               
}
               



运行结果:
请输入猴子数量=5
Press any key to continue

小黄练编程 发表于 2021-12-23 22:00:17

jackz007 发表于 2021-12-22 23:55


int 后面的count没赋值为0,也可以吗???

小黄练编程 发表于 2021-12-23 22:17:51

jackz007 发表于 2021-12-22 22:18
就是约瑟夫环问题

      编译、运行实况:

我以为是卡死了,原来是运算的慢,等了老半天才出来结果,但如果把count=0,加上,就立马出来了结果,
还有一点不明白,为什么把每个for里的i=0改为i=1;再把最后的输出i+1改为i,
运行结果就这样了:
5
Press any key to continue               5是输入猴子数。{:10_266:}{:10_266:}{:10_266:}{:10_266:}

小黄练编程 发表于 2021-12-23 22:19:08

傻眼貓咪 发表于 2021-12-23 10:53


{:10_299:}{:10_266:}
页: [1] 2
查看完整版本: 这程序错哪了?结果输不出啊,猴子选大王的题目。