约瑟夫环(c语言程序完整版)
2016-06-23 12:16
288 查看
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Node { int num; struct Node *next; }LinkList; LinkList *creat(int n) { int i = 1; LinkList *p,*q,*head; p = (LinkList*)malloc(sizeof(LinkList)); p->num = i; head = p; for(i = 2;i<=n;i++) { q = (LinkList*)malloc(sizeof(LinkList)); q->num = i; p->next = q; p = q; //p->next = head; } p->next = head; return head; } void fun(LinkList *L,int k,int m) { int i,j; LinkList *p,*q,*s; p = L; for(i = 1;i<k;i++) { q = p; p = p->next; } while(p->next!=p) { for(j = 1;j<m;j++) { q=p; p = p->next; } printf("%5d",p->num); s = p; q->next = p->next; p = p->next; free(s); } printf("%5d",p->num); } void main() { LinkList *L; int n,k,m; n = 9; m = 4; k = 2; L=creat(n); fun(L,k,m); }
相关文章推荐
- 《c语言深度解剖》读书笔记摘录
- C语言中的字符串,字符和字节函数
- 飛飛(八十)(补)请构造String类的加、减运算(s1+s2将两个字符串的连接起来;s1-s2是将s1的尾部空格和s2的前导空格去除后的连接)
- C/C++二维数组名和二级指针
- 飛飛(七十九)(补)将此类声明改为类模板声明,使得数据成员data1和data2可以是任何类型。增默认构造函数、
- 飛飛(七十九)(补)阅读程序
- 飛飛(七十八)(补)将数组a中的前size个元素按从小到大顺序排列
- C++ 类中的静态成员变量,静态成员函数
- 函数和指针
- c++ 深入理解数组
- C++中编译器必须为未申明constructor的class合成一个default constructor的几种情况
- 我的c++学习方法方面的实践体会
- 编程之路之c++ (心得)
- zookeeper c api连接管理问题
- 迭代器的有效性
- 重温指针数组和数组指针
- 详解C语言中的宏定义
- 希尔排序
- c++中字符串处理函数
- C++学习历程及感受