这程序错哪了?结果输不出啊,猴子选大王的题目。
{: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
把题目说明和要求贴一下
我对照好多遍了,思路确实是这样,但就是不知道为何输不出结果,不知道程序错哪了{:10_266:}{:10_266:}{:10_266:},最起码得出来个结果啊。{:10_266:} jackz007 发表于 2021-12-22 20:58
把题目说明和要求贴一下
有时候编译啥的都没错,但运行时就没用,比如有时候scanf("%d",&a);少了&,{:10_266:} jackz007 发表于 2021-12-22 20:58
把题目说明和要求贴一下
题目n个猴子围成一圈,从第1个猴子开始重复数一二三,数到三的猴子从圈子中出来,最后剩下的一个猴子就是大王。编程模拟此过程,输出猴子出圈的编号次序和大王的编号。 本帖最后由 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 jackz007 发表于 2021-12-22 22:18
就是约瑟夫环问题
编译、运行实况:
那我上面哪出了问题,不可能结果都出不来吧,就算是个乱码也算结果。但有时输入时,像卡死了一样,不给出结果。{:10_266:}{:10_266:}。就像我说的scanf少了&。还有if(),括号中只打一个=。他就运行不了,其他就没问题。
还有的情况,第一步查错没问题,结果建立就出现一个错误,每次都得立马关了编译器,然后重开,在复制回去按一遍,{:10_266:}{:10_266:}{:10_266:}{:10_266:}
能教教我这些知识吗,大哥{:10_266:}{:10_266:} 小黄练编程 发表于 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) ;
} jackz007 发表于 2021-12-22 23:55
你这代码跟我情况一样啊,输进去一个数,按几下回车,也是没反应{:10_266:}{:10_266:}{:10_266:} 本帖最后由 傻眼貓咪 于 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;
} 楼主的代码是在for循环里定义的i 之后的i 和a应该都会报错啊。。。你的编译器不会报错吗 zxy0107 发表于 2021-12-23 17:38
楼主的代码是在for循环里定义的i 之后的i 和a应该都会报错啊。。。你的编译器不会报错吗
你在讲啥兄弟???是不是知道哪里出了问题,赶紧指点下啊{:10_266:}
你的i是在for循环里定义的 出了for循环就不能用了 我只知道这一个原因 但在我电脑上是报错的 程序都无法运行 如果在前边定义了i=0如图,就能输出结果,但结果也不对,你的程序得到的结果永远是1,因为你的a初值是1,后来只有一个是1,其余都是0了,最后输出的应该是i+1的值吧
我也只是小白,如果说错了见谅{:5_91:} 8楼的代码我这是可以运行的,是正解(我可能只是解释了一下8楼帮你改的代码 zxy0107 发表于 2021-12-23 19:42
8楼的代码我这是可以运行的,是正解(我可能只是解释了一下8楼帮你改的代码
确实,我后面才反应过来,我这需要把最后的a改为i。但是为什么输不出结果啊,没点动静,按了几下回车。{:10_266:}{:10_266:}{:10_266:} 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
jackz007 发表于 2021-12-22 23:55
int 后面的count没赋值为0,也可以吗??? 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 10:53
{:10_299:}{:10_266:}
页:
[1]
2