m0_72340668 2022-11-12 16:59 采纳率: 100%
浏览 20
已结题

约瑟夫环的围圈报数问题

问题遇到的现象和发生背景

用c语言写一个约瑟夫环的问题,就是一群人排成圈报数,然后报到某个倍数的人退出,以此类推,求最后剩下的一个人。

用代码块功能插入代码,请勿粘贴截图

#include<stdio.h>;
#include<math.h>;
int a[999]={};
int renshu,beishu;
int main(){
printf("请分别输入人数和倍数!\n");
scanf("%d%d",&renshu,&beishu);
int now=1;
int m=renshu;
while(m>1){
for(int n=beishu;n>0;now=now%renshu+1){
if (a[now]==0){
n=n-1;
}
}
a[now]=1;
m=m-1;
now=now%renshu+1;
}
for(int x=1;x<renshu;x++){

    printf("%d",a[x]);

}

return 0;
}

运行结果及报错内容

运行结果比如输入20,4则得出0000100001000010000

我的解答思路和尝试过的方法

我感觉没问题,不知道哪里出错了

我想要达到的结果

a[1]到a[renshu]只有一个元素值是0

  • 写回答

2条回答 默认 最新

  • it_hao528 2022-11-13 21:20
    关注

    循环解决方案,代码参考:

    #include <stdio.h>
    int main () {
        int renshu, beishu;
        scanf("%d %d", &renshu, &beishu);
        int i = 0, j = 1;
        int a[999] = {0};
        int m = renshu;
        while (m > 1) {
            if (a[i % renshu] == 0) {
                if (j % beishu == 0) {
                    a[i % renshu]++;
                    m--;
                }
                j++;
            }
            i++;
        }
        for (int i = 0; i < renshu; i++) {
            printf("%d", a[i]);
        }
        printf("\n");
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月6日
  • 已采纳回答 11月28日
  • 创建了问题 11月12日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效