约瑟夫环的数组实现
2013-09-28 16:01
148 查看
约瑟夫(Josephus)问题是由古罗马的史学家约瑟夫提出的,他参加并记录了公元66-70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名将士在附近的一个洞穴中避难。在哪里,将士们群情激奋并表示:要投降毋宁死。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签并且做为洞穴中两个幸存者之一生存下来。
约瑟夫环问题的具体描述是:设有编号为1,2,......,n的n(n>0)个人围成一个圈,从第一个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,......,如此下去,知道只剩下一人为止。当任意给定 n和 m后,设计算法求 n个人出圈的次序。
void yuesefu(int a[],int n,int m)
{
int i = 0,count = 0; //count 为被杀的人数
while (count < n) {
i -= 1; // i是数组下标,自减后开始数,当数到最后一个时跳到前面
for (int j = 0; j < m ;j++) {
if (i == n - count -1) {
i = -1;
}
i++;
}
count ++; //数完一圈后被杀的人加一
printf("%d ",a[i]);
for (int j = i; j < n - count; j++) { //被杀的人退出去,他后边的人补充他的位置
a[j] = a[j+1];
}
}
}
约瑟夫环问题的具体描述是:设有编号为1,2,......,n的n(n>0)个人围成一个圈,从第一个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,......,如此下去,知道只剩下一人为止。当任意给定 n和 m后,设计算法求 n个人出圈的次序。
void yuesefu(int a[],int n,int m)
{
int i = 0,count = 0; //count 为被杀的人数
while (count < n) {
i -= 1; // i是数组下标,自减后开始数,当数到最后一个时跳到前面
for (int j = 0; j < m ;j++) {
if (i == n - count -1) {
i = -1;
}
i++;
}
count ++; //数完一圈后被杀的人加一
printf("%d ",a[i]);
for (int j = i; j < n - count; j++) { //被杀的人退出去,他后边的人补充他的位置
a[j] = a[j+1];
}
}
}
相关文章推荐
- 约瑟夫环问题(数组法)c语言实现
- 约瑟夫环(数组和链表实现方式)
- 利用数组实现约瑟夫环
- C语言实现约瑟夫环,使用循环单链表和循环数组2种方法
- 用数组实现约瑟夫环问题
- 约瑟夫环问题的数组实现
- 约瑟夫环的数组实现方式
- 约瑟夫环 数组与链表实现
- 约瑟夫环的数组实现
- 用数组实现约瑟夫环
- C语言 实现约瑟夫环 (有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数)
- 用循环数组实现约瑟夫环
- 约瑟夫环问题——初步了解+数组实现
- 约瑟夫环的C语言数组实现
- 约瑟夫环问题的 PHP 实现--使用 PHP 数组内部指针操作函数
- 约瑟夫环问题(不带头结点单循环链表实现和数组实现)
- 约瑟夫环问题的两种实现[链表+数组]
- 用数组和链表实现约瑟夫环问题
- 约瑟夫环(数组模拟实现)
- 约瑟夫环数组实现