约瑟夫环问题,用C语言编写

设N个人围坐一圈,并按顺时针方向1-N编号,从s个人开始报数,报到第m个人,此人出圈,后面的人继续从1到m报数,直到最后一个人,... 设N个人围坐一圈,并按顺时针方向1-N编号,从s个人开始报数,报到第m个人,此人出圈,后面的人继续从1到m报数,直到最后一个人, 展开
 我来答
solotony
推荐于2017-12-15 · TA获得超过599个赞
知道小有建树答主
回答量:700
采纳率:0%
帮助的人:573万
展开全部

数学原理:http://zh.wikipedia.org/wiki/%E7%BA%A6%E7%91%9F%E5%A4%AB%E6%96%AF%E9%97%AE%E9%A2%98

有递归和迭代两个程序,选一个即可。

#include <stdio.h>

int Josephus2(int n, int k) {
if (n == 1) return 0;
return (Josephus2(n - 1, k) + k ) % n;
}

int Josephus(int n, int m) {
int i, x = 0;
for (i = 1; i <= n; ++i) {
x = (x + m) % i;
}
return x;
}

int main() {

int n, m, s;

scanf("%d%d%d", &n, &s, &m)

printf("%d\n", Josephus(n, m) + s);
//printf("%d\n", Josephus2(n, m) + s);
return 0;
}
追问
scanf后面少了一个分号
追答

估计完全用C的环境吧

#include <stdio.h>

int Josephus(int n, int m) {
int i, x = 0;
for (i = 1; i <= n; ++i) {
x = (x + m) % i;
}
return x;
}

int main() {

int n, m, s;

scanf("%d%d%d", &n, &s, &m);

printf("%d\n", Josephus(n, m) + s);
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式