概述
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。
本题要求编写函数,给出每个人的退出顺序编号。
其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。函数CountOff将每个人的退出顺序编号存在数组out[]中。因为C语言数组下标是从0开始的,所以第i个位置上的人是第out[i-1]个退出的。
题目是什么意思呢?11个人围成一圈,依次开始从1报数,报到3的人出列,下一个人再从1开始报,记下每个人的出列顺序。
4 10 1 7 5 2 11 9 3 6 8
第一个出列的是3号,第二个是6号。所以输出的里面,第三个数是1,第6个数是2。
前面的4,10意思就是第一个人是第四个出列的,第二个人是第10个出列的。
void CountOff( int n, int m, int out[] )
{
int a[n]; //队列数组
int i=0, j=1, cnt=0; //i=计数器,j记录第j位出局, cnt记录报数;
for (i=0; i<n; i++) {
a[i] = i+1; // 将编号写入数组;
}
i = 0; //重新初始化 i 的值;
while (j<=n) { //当第 j=11 出局后不再记录;
if (a[i] != 0) {
cnt ++; //编号不为0 时, 报数;
}
if (cnt == m) { //报数为m时;
out[i] = j; //第 i 位出局, 记录他第 j 个出局;
j++; //出局人数+1;
cnt = 0; //重新报数;
a[i] = 0; //将编号变为零,下次不报数;
}
i++; //无论如何,向前计数
if (i == n) {
i = 0; //当 i==n 将计数重新为 0;
}
}
}
最后
以上就是洁净发卡为你收集整理的习题8-4 报数的全部内容,希望文章能够帮你解决习题8-4 报数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复