标签:报告 cti 位置 不为 流程图 函数 解题思路 元素 max
题目详情:
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。
本题要求编写函数,给出每个人的退出顺序编号。
函数接口定义:void CountOff( int n, int m, int out[] );
其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。函数CountOff将每个人的退出顺序编号存在数组out[]中。因为C语言数组下标是从0开始的,所以第i个位置上的人是第out[i-1]个退出的。
裁判测试程序样例:#include <stdio.h>
void CountOff( int n, int m, int out[] );
int main()
{
int out[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
CountOff( n, m, out );
for ( i = 0; i < n; i++ )
printf("%d ", out[i]);
printf("\n");
return 0;
}
/* 你的代码将被嵌在这里 */
①首先能够确定的是,这n个人的编号得用数组来进行保存。且初始化数组的值。
②报数的规律是:从第一个人开始报数,报到m的人退出,然后重新从1开始。所以得设一个计数的值,且在一个人退出后重新归零。
③out[]是用来存储每个人的退出顺序的,退出顺序需要设值累加保存。
④利用循环条件 “直到留下最后一个人”进行循环报数,设一个值给已经退出的数组元素,当值报到那时不继续报数。
while ( count < n ) { //结束的条件 只剩一个数值
if ( a[i] != 0 )//等于0的即推出的元素 不为0的才继续参与报数
k++;
if ( k == m ) {
j++;
out[i] = j;//第i个数 是第j个退出的意思
k = 0;
count++;
a[i] = 0;
}
i++;
if ( i == n )//又一圈的报数 开始进行
i = 0;
}
标签:报告 cti 位置 不为 流程图 函数 解题思路 元素 max
原文地址:https://www.cnblogs.com/moonwinfred/p/12050126.html