为什么我的代码没有输出?

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    int a[50],b[50],n,i,m,f=0,j=0;

    memset(a,1,sizeof(int)*50);

    scanf("%d%d",&n,&m);

    for(i=0;i<n;i++)
        scanf("%d",&b[i]);

    for(i=0;i<n;i++){
            if(a[i]==0)
                j++;
            if(j==m){
                printf("%d ",b[j]);
                b[j]=0;
                j=0;
                f++;
            }
            if(f==n-1){
                for(i=0;i<n;i++){
                    if(b[i]!=0){
                        printf("the last no is:%d\n",b[i]);
                        exit(0);
                    }
                }
            }
            if(i==n-1)
                i=0;
        }
    return 0;
}
   目前我知道的是我输入的b[i]不是正常的数值。
阅读 2.3k
2 个回答
#include<stdio.h>
#include<string.h>
int main()
{
    int a[50],b[50],n,i,m,f=0,j=0;

    memset(a,0,sizeof(a));

    scanf("%d%d",&n,&m);

    for(i=0;i<n;i++)
        scanf("%d",&b[i]);

    for(i=0;i<n;i++){
            if(a[i]==0)
                j++;
            if(j==m){
                printf("%d ",b[i]);
                a[i]=1;
                b[i]=0;
                j=0;
                f++;
            }
            if(f==n-1){
                break;
                }
            if(i==n-1){
                i=-1;
            }
    }
      for(i=0;i<n;i++)
            if(b[i]!=0){
              printf("the last no is:%d\n",b[i]);
                    }
}

数组解约瑟夫问题

你这段代码想要输出什么?

首先,这句是错误的:
memset(a,1,sizeof(int)*50);如果你打印出a[i]的值的话,你会发现所有的a[i]都是16843009,也就是0x01010101。memset是将sizeof(int)*50 bytes的内存空间设置为1,也就是说将每个bytes设为1,一个int在我的测试环境是4byte,所以a[i]就是0x01010101。

然后,既然a[i] != 0 了,那么jf也就是都是0,那么只有在n==1 或者m == 0的时候才会有输出了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进