鱼C论坛

 找回密码
 立即注册
查看: 1100|回复: 20

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

[复制链接]
发表于 2021-12-22 20:27:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
main()
{
        int a[100],N,number,count;
        scanf("%d",&N);
        number=N;
        for(int i=0;i<N;i++)
        {
                a[i]=1;
        }
        while(number>1)
        {
                for(i=0;i<N;i++)
                {
                        if(a[i]==0)
                        continue;
                        count++;
                        if(count==3)
                        {
                                number--;
                                count=0;
                                a[i]=0;
                        }
                }
        }
        for(i=0;i<N;i++)
        {
                if(a[i]!=0)
                printf("%d\n",a[i]);
        }
}
最佳答案
2021-12-22 23:55:08
小黄练编程 发表于 2021-12-22 23:36
那我上面哪出了问题,不可能结果都出不来吧,就算是个乱码也算结果。但有时输入时,像卡死了一样,不给出 ...
#include<stdio.h>
main()
{
        int a[100] , i , N , number , count                       ;
        scanf("%d" , & N)                                         ;
        number = N                                                ;
        for(i = 0 ; i < N ; i ++) a[i] = 1                        ;
        while(number > 1)
        {
                for(i = 0 ; i < N ; i ++)
                {
                        if(a[i])
                        {
                                count ++                          ;
                                if(count == 3)
                                {
                                        number --                 ;
                                        count = 0                 ;
                                        a[i] = 0                  ;
                                }
                        }
                }
        }
        for(i = 0 ; i < N ; i ++) if(a[i]) printf("%d\n" , i + 1) ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-22 20:58:21 | 显示全部楼层
        把题目说明和要求贴一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-22 21:46:29 | 显示全部楼层
jackz007 发表于 2021-12-22 20:58
把题目说明和要求贴一下

我对照好多遍了,思路确实是这样,但就是不知道为何输不出结果,不知道程序错哪了,最起码得出来个结果啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-22 21:49:02 | 显示全部楼层
jackz007 发表于 2021-12-22 20:58
把题目说明和要求贴一下

有时候编译啥的都没错,但运行时就没用,比如有时候scanf("%d",&a);少了&,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-22 21:50:03 | 显示全部楼层
jackz007 发表于 2021-12-22 20:58
把题目说明和要求贴一下

题目  n个猴子围成一圈,从第1个猴子开始重复数一二三,数到三的猴子从圈子中出来,最后剩下的一个猴子就是大王。编程模拟此过程,输出猴子出圈的编号次序和大王的编号。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[100] , e , i , n , m                         ;
        scanf("%d" , & n)                                  ;
        for(e = i = 0 ; i < n ; i ++) d[i] = i + 1         ;
        for(m = n , i = 0 ; m > 1 ; i ++) {
                if(d[i % n]) {
                        e ++                               ;
                        if(! (e % 3)) {
                                if(m < n) printf(" , ")    ;
                                printf("%d" , (i % n) + 1) ;
                                d[i % n] = 0               ;
                                m --                       ;
                        }
                }
        }
        printf("\n")                                       ;
        for(i = 0 ; i < n ; i ++) if(d[i]) break           ;
        printf("The monkey king is %d\n" , d[i])           ;
}
        编译、运行实况:
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-22 23:36:41 | 显示全部楼层
jackz007 发表于 2021-12-22 22:18
就是约瑟夫环问题

        编译、运行实况:

那我上面哪出了问题,不可能结果都出不来吧,就算是个乱码也算结果。但有时输入时,像卡死了一样,不给出结果。。就像我说的scanf少了&。还有if(),括号中只打一个=。他就运行不了,其他就没问题。
还有的情况,第一步查错没问题,结果建立就出现一个错误,每次都得立马关了编译器,然后重开,在复制回去按一遍,
能教教我这些知识吗,大哥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-22 23:55:08 | 显示全部楼层    本楼为最佳答案   
小黄练编程 发表于 2021-12-22 23:36
那我上面哪出了问题,不可能结果都出不来吧,就算是个乱码也算结果。但有时输入时,像卡死了一样,不给出 ...
#include<stdio.h>
main()
{
        int a[100] , i , N , number , count                       ;
        scanf("%d" , & N)                                         ;
        number = N                                                ;
        for(i = 0 ; i < N ; i ++) a[i] = 1                        ;
        while(number > 1)
        {
                for(i = 0 ; i < N ; i ++)
                {
                        if(a[i])
                        {
                                count ++                          ;
                                if(count == 3)
                                {
                                        number --                 ;
                                        count = 0                 ;
                                        a[i] = 0                  ;
                                }
                        }
                }
        }
        for(i = 0 ; i < N ; i ++) if(a[i]) printf("%d\n" , i + 1) ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-23 09:54:58 | 显示全部楼层

你这代码跟我情况一样啊,输进去一个数,按几下回车,也是没反应
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-23 10:53:48 From FishC Mobile | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-12-23 10:56 编辑

#include <stdio.h>

int main(){
        int n, m = 3;
        scanf("%d", &n);
        int arr[n];
        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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-23 17:38:18 | 显示全部楼层
楼主的代码是在for循环里定义的i 之后的i 和a[i]应该都会报错啊。。。你的编译器不会报错吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你在讲啥兄弟???是不是知道哪里出了问题,赶紧指点下啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-23 19:33:24 | 显示全部楼层
QQ截图20211223193148.png
你的i是在for循环里定义的 出了for循环就不能用了 我只知道这一个原因 但在我电脑上是报错的 程序都无法运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-23 19:40:25 | 显示全部楼层
如果在前边定义了i=0如图,就能输出结果,但结果也不对,你的程序得到的结果永远是1,因为你的a[i]初值是1,后来只有一个是1,其余都是0了,最后输出的应该是i+1的值吧
我也只是小白,如果说错了见谅 QQ截图20211223194015.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-23 19:42:25 | 显示全部楼层
8楼的代码我这是可以运行的,是正解(我可能只是解释了一下8楼帮你改的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-23 21:46:45 | 显示全部楼层
zxy0107 发表于 2021-12-23 19:42
8楼的代码我这是可以运行的,是正解(我可能只是解释了一下8楼帮你改的代码

确实,我后面才反应过来,我这需要把最后的a[i]改为i。  但是为什么输不出结果啊,没点动静,按了几下回车。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-23 21:51:29 | 显示全部楼层
zxy0107 发表于 2021-12-23 19:42
8楼的代码我这是可以运行的,是正解(我可能只是解释了一下8楼帮你改的代码
#include<stdio.h>
int main()
{
        int  a[100];
        int num,n,count=0;
        printf("请输入猴子数量=");
        scanf("%d",&n);
        num=n;
        for(int i=1;i<n;i++)
        {
                a[i]=1;
        }
        while(num>1)
        {
                for(i=1;i<n;i++)
                {
                        if(a[i]==0)
                        continue;
                        count++;
                        if(count==3)
                        {
                                a[i]=0;
                                num--;
                                count=0;
                        }
                }
        }
        for(i=1;i<n;i++)
        {        if(a[i]!=0)
                printf("%d\n",i);
        }
                
}
                

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-23 22:00:17 | 显示全部楼层

int 后面的count没赋值为0,也可以吗???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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是输入猴子数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-23 22:19:08 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 09:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表