约瑟夫环问题
来源:互联网 发布:网络推广的收费标准 编辑:程序博客网 时间:2024/06/06 21:00
//问题描述:编号是1,2,……,n(n>0)的n个人按照顺序时针方向围坐一圈,//每个人持有一个正整数密码。开始时任选一个正整数作为报数上限值m,//从某个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列//将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去//直到所有人全部出列为止。设计一个程序来求出出列顺序,并输出结果。#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef struct Node{ int num,cipher;//num编号,cipher密码 struct Node *next;}*LinkList;LinkList creat(int n);//创建链表void select(LinkList list,int m);int main(){ int n,m; LinkList list; printf("请输入人数:\n"); scanf("%d",&n); printf("请输入初始报数的最大值:\n"); scanf("%d",&m); list=creat(n); select(list,m); return 0;}LinkList creat(int n){ int k,idx=1; LinkList list; struct Node *r,*p; p=(struct Node*)malloc(sizeof(struct Node)); if(p==NULL) { printf("系统溢出错误!\n"); exit(1); } list=p; p->num=1; printf("输入第%d个人的密码:\n",idx++); scanf("%d",&p->cipher); r=p; p->next=p; for(k=2;k<=n;k++) { p=(struct Node*)malloc(sizeof(struct Node)); p->num=k; printf("输入第%d个人的密码:\n",idx++); scanf("%d",&p->cipher); r->next=p; r=p; } p->next=list; return (list);}void select(LinkList list,int m){ struct Node *p; while(1) { if(list->next==list) { printf("出列的序号为: %d,密码是:%d\n",list->num,list->cipher); free(list); return ; } while(--m>0) list=list->next; printf("出列的序号为:%d,密码是:%d\n",list->num,list->cipher); m=list->cipher; p=list->next; list->next=p->next; list->num=p->num; list->cipher=p->cipher; free(p); }}
2 0
- 约瑟夫问题、约瑟夫环
- Josephus约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题(Josephus)
- 约瑟夫环问题--java
- 约瑟夫环问题 Josephus
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 求解约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- C++作业七
- 快速排序
- Swift学习第十一枪-基于协议的MVVM模式的实现
- Activity按两次返回键退出与Activity进入与退出的动画
- 常用树类数据结构总结-二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的性能分析
- 约瑟夫环问题
- c++第七次上机作业
- 动态规划经典问题
- Entity Systems are the future of MMOG development
- C++实验7-特殊三位数
- C++ 作业7 函数复习
- JavaAPI之注释类型Target
- Operation must use an updateable query
- 【SSH】-框架