当前位置:   article > 正文

C 语言实例 - 约瑟夫生者死者小游戏_约瑟夫生者死者小游戏c语言

约瑟夫生者死者小游戏c语言

问题描述:

30 个人在一条船上,超载,需要 15 人下船。

于是人们排成一队,排队的位置即为他们的编号。

报数,从 1 开始,数到 9 的人下船。

如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?

解题思路:

该问题中有两个状态,上船与下船,因此需要对这两个状态分别进行标记,常用的即0与1,另需一个记数变量来结束循环,剩余15人为止。另需一变量来表示报数值,并当报数值为9的时候进行状态更改操作。

给30个人编号1-30,使用数组a[30]={0}表示,用于存储每个人的报数值;

使用数组b[30]={0}标记每个人的状态,即在船上还是船下,,这里将每个人的初值标记为0(表示在船上)1表示下船;

i代表他们的编号,当i等于31时,手动将i置为1;

c代表被扔下船的人数(c=15时循环结束);

变量j用来记数,j=9时将对应编号i的人置 0(扔下船)并让j重新记数。

  1. #include<stdio.h>
  2. int c = 0;//c代表被扔下船的人数
  3. int i = 1;
  4. int j = 0;
  5. int a[30] = { 0 };
  6. int b[30] = { 0 };
  7. int main()
  8. {
  9. while (i<=31)
  10. {
  11. if (i == 31)//当i等于31时,手动将i置为1
  12. {
  13. i = 1;
  14. }
  15. else if (c == 15)//c=15时跳出循环,循环结束
  16. {
  17. break;
  18. }
  19. else
  20. {
  21. if (b[i] != 0)//b[i]为1时,表示此人已下船,i加1,check不增加,继续循环
  22. {
  23. i++;
  24. continue;
  25. }
  26. else
  27. {
  28. j++;
  29. if (j != 9)
  30. {
  31. i++;
  32. continue;
  33. }
  34. else //j=9时将对应编号i的人标记为1,并记录其报数值9
  35. {
  36. b[i] = 1;
  37. a[i] = j;
  38. j = 0;
  39. printf("第%d号下船了\n", i);
  40. i++;
  41. c++;
  42. }
  43. }
  44. }
  45. }
  46. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/434933
推荐阅读
相关标签
  

闽ICP备14008679号