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日

悬赏问题

  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行