python约瑟夫环算法和流程图_史上最全的约瑟夫环算法程序和原理

本文详细介绍了约瑟夫环问题的数学算法、非递归算法和链表算法的实现,并探讨了算法中的递推公式和特殊情况处理,包括对序列变化的深入分析。
摘要由CSDN通过智能技术生成

数学算法:

#include “stdio.h”

#include “stdlib.h”

int josephus(int n, int m)

{

int pos;

if (n == 1) {

return 1;

} else {

pos = (josephus(n-1, m) + m -1)%n + 1;

}

return pos;

}

int josephus_no_recurse_1(int n, int m)

{

int s = 0;

int i;

for (i=2; i<=n; i++) {

s = (s + m)%i;

}

return s + 1;

}

int josephus_no_recurse_2(int n, int m)

{

int s = 1;

int i;

for (i=2; i<=n; i++) {

s = (s + m -1)%i + 1;

if (s == 0) {

s = n;

}

}

return s;

}

/*

以前两个非递归的算法,在http://baike.baidu.com/view/717633.htm说: 我们需要对f[n]=(f[n-1]+k)%n式进行修正:

f[n]=(f[n-1]+k)%n;if(f[n]==0)f[n]=n;

测试时发现:需不需要修正是根据情况而定的--josephus_no_recurse_1这种不需要

*/

int main()

{

int n;

int m;

int i;

int count;

printf(“pls input total num:/n”);

scanf(“%d”, &n);

printf(“pls input a loop count:/n”);

scanf(“%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值