secant26 2021-12-24 06:10 采纳率: 100%
浏览 47
已结题

C语言约瑟夫问题,不知道代码错在哪里

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
#include <stdio.h>

int main()
{
    int A[100],B[100],N,n,m,i,j,Yet,Initial,Out,k;
    for(i=0;i<100;i++){
        scanf("%d",&(A[i]));
        scanf("%d",&(B[i]));
        if(A[i]==0) break;
    }
    N=i;//用N记录输入数据的总组数
    int b[N]; //用于存储不同m, n对应的猴王的编号
    for(k=0;k<N;k++){
        n=A[k],m=B[k],Initial=0;
        //Initial是最开始报数的猴的编号【注意归零问题】
        int a[n];
        for(i=0;i<n;i++) a[i]=1;
        //将数组a[n]中的每个元素都赋初值为1
        for(i=0;i<n-1;i++){
            //只做n-1次循环,每次循环出局一猴,最后正好只剩下一猴
            Yet=0;
            for(j=Initial;Yet<m;j++){
                if(j>=n) j=j%n;
                if(a[j]==1) Yet++;
                //Yet表示已报数的猴的累计数目
            }
            Out=j;//变量Out表示出局的猴的编号
            if(Out>=n) Out=Out%n;
            a[Out]=0;
            Initial=j+1;
        }
        for(i=0;i<n;i++){
            if(a[i]==1) b[k]=i+1;
        }
    }
    for(i=0;i<N;i++) printf("%d\n",b[i]);
    return 0;
}
运行结果及报错内容

输入:
12 4
0 0

输出:
12

我的解答思路和尝试过的方法
我想要达到的结果

展开全部

  • 写回答

2条回答 默认 最新

  • Admini$trat0r .net领域新星创作者 2021-12-24 06:11
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月24日
  • 创建了问题 12月24日