C++ 约瑟夫环的实例代码

2025-05-27 0 32

C++ 约瑟夫环的实例代码

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

分析:有n个人,要想所有的人都退出去,只有每个人喊到m,才可以退完,所以可以算出,n*m为所有人总共报数的总次数。

代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43
/*

* 约瑟夫出圈

*/

#include <stdio.h>

int main()

{

char peo[100] ;

char *p_peo = peo;

int i , n , skip , flag[100] = {0} , cnt;

int *p_flag = NULL;

printf("请输入人数:");

scanf("%d", &n);

printf("所有人如下:\\n");

for(p_peo , i = 0 ; p_peo < peo + n ; ++p_peo , ++i)

{

*p_peo = 'a' + i;

printf("%c ", *p_peo);

}

printf("\\n");

printf("请输入报数值:");

scanf("%d", &skip);

cnt = 0;

while(cnt <= n * skip)

{

for(p_peo = peo , p_flag = flag ; p_peo < peo + n ; ++p_peo , ++p_flag)

{

if(*p_flag)

continue;

cnt++;

if(!(cnt % skip))

{

*p_flag = 1;

printf("%c ", *p_peo);

}

}

}

printf("\\n");

return 0;

}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C++ 约瑟夫环的实例代码 https://www.kuaiidc.com/73227.html

相关文章

发表评论
暂无评论