一道有点难的题,实在是想不出来,请大家来做做!
题目:出圈游戏一\要求:
请用C编写一个程序,模拟出圈游戏.
游戏规则是:设有N个人围坐一圈并按顺时针方向从1到N编号,从第S个人开始进行1到M的报数,报数到第M的人出圈,剩余的人又形成一个圈,再从他的下一个人重新开始1到M的报数,如此进行下去直到所有的人都出圈为止.
现要求按出圈次序输出这N个人的名字.
程序的功能要求如下:
1) 输入参加游戏的人员姓名清单
2) 输入出圈数字M,输入起始位置S,注意计数和位置都是从1开始的;
3) 按顺序输出依次出圈人的姓名
二\推荐实现步骤:
1编写MAIN函数
1) 定义保存参加游戏人员的姓名的数组,以及标志人员是否已出圈的数组,参考定义:
char players[20][10]; //人员名单
int isOuted[20]; //标志对应位置的人是否已出圈
注:假定游戏人数最多为20个
2) 提示用户"请输入参加出圈游戏人员名单",然后依次输入人员姓名,当姓名的第一个字母是"!"时表示输入结束
3) 提示用户"输入出圈数字M"
4) 提示用户"输入报数的起始位置S"
5) 输出参加游戏的人数,出圈数字,起始位置
6) 初始化标志出圈的数组,设置所有人员未出圈;
7) 模拟游戏,从起始位置S由1开始报数,报到M的人出圈,输出出圈人的姓名,设置已出圈标志,已出圈人数加1.自出圈人的下一个人开始,继续下一轮的游戏,直到N个游戏者全部出圈.
提示:
1) 注意起始位置和报数都是从1开始的,但数据下标是从0开始的.
2) 使用取模运算实现回转,给数组下标变量加1取模(数据大小N的模数),那么当报数到数组末尾后,就可以回到数组开头
3) 数组是同步的,数组元素一一对应,isOuted数组记录players对应位置的人是否已出圈,只有没出圈时报数才递增.
三\程序运行参考界面如下:
请输入参加出圈游戏人员名单
第1位:张三
第2位:李四
第3位:王五
第4位:赵六
第5位:田七
第6位:吴八
第7位:陈九
第8位:孙十
第9位:!
请输入出圈数字:3
请输入起始位置:5
共有8人参加游戏,出圈数字是3,起始位置5(田七)
开始游戏...
陈九出圈!
李四出圈!
田七出圈!
张三出圈!
吴八出圈!
赵六出圈!
孙十出圈!
王五出圈!