无糖少年 2022-03-10 16:17 采纳率: 89.2%
浏览 1017
已结题

设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一人为止。

设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一人为止。
感觉这个代码很简洁但是while无限循环里面没太看懂。
#include<stdio.h>
#define MAX 100000
int main()
{
int m,n;
while(scanf("%d%d",&n,&m)!=EOF)
{
int i=0,j=0,temp=0,a[MAX]={0};
while(1)
{
i++;
if(i>n) i=1;
if(a[i]==1) continue;
j++;
if(temp==i) break;
if(j==m)
{
a[i]=1;
j=0;
}
temp=i;
}
printf("%d\n",temp);
}
}

  • 写回答

1条回答 默认 最新

  • Admini$trat0r 新星创作者: 后端开发技术领域 2022-03-10 16:42
    关注

    约瑟夫环改版,细品吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月24日
  • 已采纳回答 7月16日
  • 创建了问题 3月10日