经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言版约瑟夫问题算法实现
来源:jb51  时间:2021/12/31 12:57:58  对本文有异议

1、问题描述:

? ? ? ?有n个人围坐一圈,现从第s个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列.如此下去,直到所有人都出列为止.试设计确定他们出列次序序列的程序

2、算法步骤:

????????1、确定存储结构:n个人围成一圈,故使用循环单链表来存储序号

????????2、算法实现:

该问题共n、m、s三个未知量,所以可以通过三个循环来实现,第一个循环用来确定最开始第一个报数的人的指针位置(单链表的头节点指针指向第s个人),第二个循环用来控制输出序号的次数(共n次),第三个循环用来数数(每一次循环使指针移动m次)

3、实现源代码:

  1. # include <stdio.h>
  2. # include <malloc.h>
  3. typedef struct Node
  4. {
  5. int number;
  6. struct Node * pNext;
  7. }NODE, *PNODE;
  8. PNODE creat_list(int n);
  9. int main (void)
  10. {
  11. int n,m,s;
  12. printf("约瑟夫环问题:\n");
  13. printf("设有n(编号为“0 1 2 3 .....n-1 n”)个人围坐一圈,现从第s个人开始报数,数到m的人出列,\n求最后的出列顺序。\n");
  14. printf("请设置n, s, m :\n");
  15. printf("n = ");
  16. scanf("%d", &n);
  17. printf("s = ");
  18. scanf("%d", &s);
  19. printf("m = ");
  20. scanf("%d", &m); //问题引导提示代码段
  21. PNODE pHead = NULL;
  22. pHead = creat_list(n);
  23. pHead->number = 1; //创建单链表
  24. PNODE p = pHead; //定义头指针
  25. int i,j,k; //定义循环参数
  26. for(j = 1; j < s; j++)
  27. {
  28. p = p->pNext;
  29. } //第一个循环确定第一个报数的人在循环单链表中的位置
  30. for(i = 1; i <= n; i++) //外部循环代表遍历到最后一个所需要的循环次数
  31. {
  32. for(k = 1; k < m; ) //内部循环代表遍历出列的人
  33. {
  34. if(p -> pNext -> number != 0)
  35. {
  36. p = p -> pNext;
  37. k++;
  38. }
  39. else
  40. {
  41. p = p -> pNext;
  42. }
  43. }
  44. printf("%d ",p -> number);
  45. p -> number = 0;
  46. do
  47. {
  48. p = p -> pNext;
  49. }while(p -> number == 0);
  50. }
  51. printf("\n");
  52. return 0;
  53. }
  54. PNODE creat_list(int n) //单链表的创建
  55. {
  56. PNODE pHead = (PNODE)malloc(sizeof(NODE));
  57. PNODE pTail = pHead;
  58. int i;
  59. for(i = 2; i <= n; i++)
  60. {
  61. PNODE pNew = (PNODE)malloc(sizeof(NODE));
  62. pNew->number = i;
  63. pTail->pNext = pNew;
  64. pNew->pNext = pHead;
  65. pTail = pNew;
  66. }
  67. return pHead;
  68. }

到此这篇关于C语言版约瑟夫问题算法实现的文章就介绍到这了,更多相关C语言约瑟夫问题内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号