约瑟夫环问题,用C语言编写
来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/28 15:50:09
约瑟夫环问题,用C语言编写
设N个人围坐一圈,并按顺时针方向1-N编号,从s个人开始报数,报到第m个人,此人出圈,后面的人继续从1到m报数,直到最后一个人,
设N个人围坐一圈,并按顺时针方向1-N编号,从s个人开始报数,报到第m个人,此人出圈,后面的人继续从1到m报数,直到最后一个人,
数学原理: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) {
\x09if (n == 1) return 0;
\x09return (Josephus2(n - 1, k) + k ) % n;
}
int Josephus(int n, int m) {
\x09int i, x = 0;
\x09for (i = 1; i <= n; ++i) {
\x09\x09x = (x + m) % i;
\x09}
\x09return x;
}
int main() {
\x09int n, m, s;
\x09scanf("%d%d%d", &n, &s, &m)
\x09printf("%d\n", Josephus(n, m) + s);
\x09//printf("%d\n", Josephus2(n, m) + s);
\x09return 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;
}
int Josephus2(int n, int k) {
\x09if (n == 1) return 0;
\x09return (Josephus2(n - 1, k) + k ) % n;
}
int Josephus(int n, int m) {
\x09int i, x = 0;
\x09for (i = 1; i <= n; ++i) {
\x09\x09x = (x + m) % i;
\x09}
\x09return x;
}
int main() {
\x09int n, m, s;
\x09scanf("%d%d%d", &n, &s, &m)
\x09printf("%d\n", Josephus(n, m) + s);
\x09//printf("%d\n", Josephus2(n, m) + s);
\x09return 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;
}