C语言实现约瑟夫环
2017-11-05 13:49
429 查看
伪链表实现
0 1 2 3 4 5 6
7 8 9 10 11 数组下标
伪链表本质是数组,用其下标表示每个人的序号,每个数组元素中存的是下一个人的下标(序号)
代码如下:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 0 |
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; }
相关文章推荐
- 单链表实现约瑟夫环(JosephCircle)(C语言)
- linux下用c语言实现约瑟夫环游戏
- 用c语言一位数组实现约瑟夫环
- C语言指针实现循环报数问题(简单约瑟夫环问题)
- C语言-----链表实现约瑟夫环
- 约瑟夫环的C语言数组实现
- C语言 实现约瑟夫环 (有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数)
- C语言实现约瑟夫环问题
- 自杀环---约瑟夫环(单链表经典面试题)------>C语言实现
- c语言实现约瑟夫环-每隔几个删除一个,求剩下的
- 约瑟夫环的C语言实现
- C语言-实现约瑟夫环
- 约瑟夫环的C语言链表实现
- 约瑟夫循环c语言实现 (<<数据结构与算法>>-王曙燕 约瑟夫环问题解答)
- 约瑟夫环问题(c语言数组实现)
- C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题
- c语言:约瑟夫环的实现
- C语言实现单链表之约瑟夫环
- C语言单链表实现约瑟夫环
- C语言算法实现约瑟夫环1