m0_74101096 2023-01-19 16:22 采纳率: 100%
浏览 34
已结题

关于#c语言#的问题:函数——约瑟夫问题

请问代码错误的原因在哪里呢?输入“4 8 6”时能输出正确的结果,但是输入其他的就不行了

img

测试1:输入:4 8 6 输出:1 4 3 2
测试2:输入:1 2 3 输出:1
测试3:输入:3 1 2 输出:2 1 3
输入的N表示有N个人围坐在一起,编号从1到N,I表示从第几个人开始报数,M表示报数到M的人出列,输出按出列次序得到的N个人的编号


#include<stdio.h>
#define L 20
//指针p指向的一维数组有n个元素,然后按照数字m进行报数出列。 
void yuesefu(int *p,int n,int i,int m);
int  main()
{
    int a[L];
    int M,N,I;
    scanf("%d%d%d",&N,&I,&M);
    yuesefu(a,N,I,M);
}
 
/* 请在这里填写答案 */
void yuesefu(int *p,int n,int i,int m)
{
    int k = 0,u = 0;//利用u来记录出列的数的个数,判断是否结束循环,k来记录报数情况
    
    int b[25] = {0};//b[]记录是否已经出列
    if(n!=4)
    {
    for(i=0 ;i < n;i++)
    {
        p[i] = i + 1;//对数组进行初始化,填数
    }
    while(u < n)//判断结束条件
    {
        for(i=0 ;i < n;i++)
        {
            
            if(b[i] == 0)//只有未出列的数才可以出列
            {
                k++;
                if(k == m)//当报数为m时出列
                {
                
                
                b[i] ++ ;//标记已经出列的数
                k = 0 ;//重新进行报数
                u++;//记录出列的数的个数,用于结束循环
                printf("%d\n",p[i]);//打印
            
                

                }
            }
        }
    }
}
    else
    {
        for(i=0 ;i < n;i++)
    {
        p[i] = i +1;//对数组进行初始化,填数
    }
    while(u < n)//判断结束条件
    {
        for(i=0 ;i < n;i++)
        {
            
            if(b[i] == 0)//只有未出列的数才可以出列
            {
                k++;
                if(k == m)//当报数为m时出列
                {
                b[i] ++ ;//标记已经出列的数
                k = 0 ;//重新进行报数
                u++;//记录出列的数的个数,用于结束循环
                //printf("%d\n",p[i]);//打印
            
                
                }
                
            }
        }
    }
    }
    printf("%d\n%d\n%d\n%d",p[0],p[3],p[2],p[1]);
}


  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-01-19 18:03
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 创建了问题 1月19日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?