急急急!!!求助,敢死队问题新演化

幽冥zxy 2019-12-10 10:58:04
参加任务的n个敢死队成员同乘一条船, 因为严重超载,加上风高浪大,危险万分;因此船长告诉各成员,只有将全船一半的成员投入海中,其余人才能幸免遇难。无奈,大家只得同意这种办法,并议定n个人围成一一圈,由第1个人开始,顺时针依次报数,数到第m 人,便把他投入大海中,然后从他的下一个人数起,逆时针数到第k人,将他投入大海,然后从他逆时针的下一个人数起,顺时针数到第m人,再将他投入大海,如此循环,直到剩下n/2个乘客为止。1.问哪些位置是将被扔下大海的位置。2.将改题目演化一下, 若某成员已知成员数n,自己的位置在第t个位置,则如果设置k和m才能保证自己存活。

要求: (1)用两种数据结构来实现;

(2) n, m, k, t均为人工输入;

(3)界面友好
...全文
81 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2019-12-10
  • 打赏
  • 举报
回复
构建一个循环数组来实现就好了
输入n,m,k
建立一个长度n的数组,初始化内容都是0
做一个计数器c,初始化为n
定义一个 位置变量i=0
写个while(1)循环
从i开始,向后找到第m个数组值为0的,找的过程当中每移动一次 i%=n操作一次,确保i在数组有效范围内
找到后把数组对应的数值设置为1,表示已经扔下海去了,c--,判断c是否到==n/2 决定是否退出循环
从i+1 开始向前找k个数组值为0的, 过程当中i每次减一个,都要判断i是否<0 小于0 i +=n,确保i在有效范围内
找到后,数组对应的数值设为1, 表示又扔下去一个,c--, 判断处是否==n/2 决定是否退出循环

代码自己写吧, 有问题贴代码

你要是熟悉指针,用双向循环链表,初始化把1到n都放进去, 然后指针前后移动,遇到扔的就从链表当中摘除
这个更直观,代码也复杂不要哪儿去
lin5161678 2019-12-10
  • 打赏
  • 举报
回复
哦 回复错题目了 应该是 约瑟夫环 百度查找一下有很多介绍
lin5161678 2019-12-10
  • 打赏
  • 举报
回复
比较简单的用memmove 借助临时数组存数据 三次函数调用就完成了

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧