C++:利用C++语言实现约瑟夫环问题——利用函数嵌套+交互式实现n只猴子选猴王

举报
一个处女座的程序猿 发表于 2021/03/27 00:10:24 2021/03/27
【摘要】 C++:利用C++语言实现约瑟夫环问题——利用函数嵌套+交互式实现n只猴子选猴王     目录 输出结果 实现代码       输出结果       实现代码 #include<iostream> //头文件,识别大部分预处理命令,编译器才会合法识别后边使用的关键字using namespace std; //T1、命名空间,包括cout...

C++:利用C++语言实现约瑟夫环问题——利用函数嵌套+交互式实现n只猴子选猴王

 

 

目录

输出结果

实现代码


 

 

 

输出结果

 

 

 

实现代码


  
  1. #include<iostream> //头文件,识别大部分预处理命令,编译器才会合法识别后边使用的关键字
  2. using namespace std; //T1、命名空间,包括cout、cin、endl等
  3. /*
  4. 函数的嵌套:约瑟夫环问题——n只猴子选猴王的问题
  5. }
  6. */
  7. //void可知,此函数没有使用返回值
  8. void NextPosition(int &p,int tail) //p是当前猴子的下标,执行函数之后得到下一个下标,tail表示最后一只猴子的下标
  9. {
  10. p = (p < tail ? p + 1 : 0); //暂时不考虑被淘汰掉的猴子
  11. }
  12. int NextNumber(int n, int tail) //当前要报的数字、要报的最大数字
  13. {
  14. return n == tail ? 1 : n + 1; //
  15. }
  16. int MonkeyKing(int total, int cycle) //参数输入猴子总数、所报最大数字
  17. {
  18. bool*failure = new bool[total]; //建立total只猴子,为bool型,识别为是否被淘汰
  19. memset(failure, 0, sizeof(bool)*total); //所有猴子初始化为0即false,即没有被淘汰
  20. //menset函数对数组进行归0,如果要统一赋其他值,可用for循环
  21. int position = total - 1; //当前位置确定为最后一只猴子,
  22. int said = 0; //所报数字
  23. int i;
  24. int remained = total; //剩下的猴子个数
  25. while (remained > 1)
  26. {
  27. NextPosition(position,total-1); //从当前猴子移动到下一只去
  28. if (failure[position] = false) //假如该猴子尚未被淘汰
  29. {
  30. said = NextNumber(said, cycle); //被轮到的猴子应该报到的数
  31. cout << "第" << position + 1 << "只猴子报" << said;
  32. if (said==cycle) //判断这只猴子报出的数是否为最大值,如果是,则要将其淘汰
  33. {
  34. failure[position] = true; //将这只猴子淘汰出去
  35. cout << ",被淘汰。剩下" << --remained << "个\n";
  36. }
  37. else cout<<"。\n";
  38. }
  39. }
  40. //for (int i = 0; i < total; i++) if (failure[i] == false) break; //T1、判断猴子是不是没有被汰淘
  41. for (i = 0; failure[i]; i++); //T2、最简单的一句话
  42. delete []failure;
  43. return i; //返回没有被淘汰的猴子下标
  44. }
  45. // void return; int return 0;
  46. void main()
  47. {
  48. cout << "Hello,world!欢迎来到《一个处女座程序猿》的博客!\n";
  49. int total,cycle; //定义猴子总数、所报最大数字
  50. cout <<"请输入猴子总数:"; // << endl
  51. cin >> total;
  52. cout << "请输入猴子所报最大数:" ;
  53. cin >> cycle;
  54. cout << "第" << MonkeyKing(total, cycle)+1 <<"个猴子是猴王。\n";
  55. system("pause");
  56. return;
  57. }

 

 

 

 

 

 

 

 

文章来源: yunyaniu.blog.csdn.net,作者:一个处女座的程序猿,版权归原作者所有,如需转载,请联系作者。

原文链接:yunyaniu.blog.csdn.net/article/details/103330046

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。