您的位置:首页 > 编程语言 > C语言/C++

C语言实现约瑟夫环

2017-11-05 13:49 429 查看
伪链表实现

 1 2 3 4 5 6 7 8 91011 0
  0   1   2   3   4  5   6 
7   8   9   10  11     数组下标

伪链表本质是数组,用其下标表示每个人的序号,每个数组元素中存的是下一个人的下标(序号)

代码如下:

//默认从1开始数
#include <stdio.h>

#define N 12
#define M 4

void fun(int *person);

void fun(int *person) {
int pre = N-1;   //前驱下标
int cur = 0;   //当前下标
int count = 0;
int rest = N;

while(rest) {
if(++count >= M) {                //杀人    ////不能是count++ % M   !!!
person[pre] = person[cur];      //当前人出圈
--rest;                         //剩余存活人数-1
printf("%d\n", cur+1);          //输出出圈人序号
count = 0;                      //数数归零
}
else {                            //移动到下一个活人
pre = cur;
}
cur = person[cur];
}
}

int main(void) {
int person
= {0};
int i;

for(i = 0; i < N; i++) {
person[i] = (i+1) % N;
}

fun(person);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: