标题:这个报数出圈的C语言递归编程怎么理解?
只看楼主
karryyyhr
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-7-4
结帖率:0
已结贴  问题点数:20 回复次数:9 
这个报数出圈的C语言递归编程怎么理解?
#include<stdio.h>
void joseph(int n,int m);
int main()
{
    int n,m;
    printf("参加游戏的人数:");
    scanf("%d",&m);
    printf("出圈数为:");
    scanf("%d",&n);
    joseph(n,m);
   return 0;

}
void joseph(int n,int m)//从这里不明白什么意思,可以解释解释吗?????
{
    int i,s=0;
    for(i=2;i<=m;i++)
    s= (s+n)%i;
    printf("最后的剩下的人的编号是:%d\n",s+1);
}

搜索更多相关主题的帖子: 报数 出圈 编程 int printf 
2018-07-04 21:53
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:10 
    这其实是一个数学的应用问题:已知n个人(以编号1,2,3...m分别表示)围坐在一张圆桌周围。从编号为i的人开始报数,数到n的那个人出列;他的下一个人又从1开始报数,数到n的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
2018-07-04 22:09
karryyyhr
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-7-4
得分:0 
回复 2楼 自学的数学
所以如果用上面的那个代码是怎么操作的呢、看不明白那个代码,可以解释下吗?
2018-07-04 22:12
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
这就是一个约瑟夫环问题。
算法原理编辑
约瑟夫环运作如下:
1、一群人围在一起坐成环状(如:N)
2、从某个编号开始报数(如:K)
3、数到某个数(如:M)的时候,此人出列,下一个人重新报数。
4、一直循环,直到所有人出列,约瑟夫环结束。
就是这个意思。
2018-07-04 22:26
karryyyhr
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-7-4
得分:0 
回复 4楼 自学的数学
for(i=2;i<=m;i++)
    s= (s+n)%i;那这里面的i=2是为什么呢?
2018-07-04 22:40
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
出圈人数。
2018-07-04 22:55
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:10 
具体可以参考资料嘛~
能找到资料的我就尽量少说或者不说了~

题目的意思是这样的,一开始有1个人,然后每报n次数就在报数的那个位置加入一个人,当m个人加入完毕后,问从左到右最后一个加入的人的编号为多少?~

[此贴子已经被作者于2018-7-5 12:07编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-07-05 09:36
karryyyhr
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-7-4
得分:0 
回复 7楼 九转星河
不明白,可以在仔细点或者结合代码来讲讲吗?
2018-07-05 15:10
karryyyhr
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-7-4
得分:0 
回复 6楼 自学的数学
那为什么i的初值为2呢?
2018-07-05 15:21
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 9楼 karryyyhr
看7楼回复嘛,一开始就只有1个人,i=2表示第二个人的插入位置,i=m表示第m个人的插入位置~
网上搜过有资料挺详细的,那些搜搜就找到就不贴出来了~
这个理解看上去有点玄,所以说最好还是找详细资料,我就是简单说说而已~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-07-05 20:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488384-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.167135 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved