早教吧 育儿知识 作业答案 考试题库 百科 知识分享

Pascal数组问题!急急急!问题:拉手游戏题目描述N个小朋友手拉手站成一个圆圈,从第一个小朋友开始循环报数,报到M的那个小朋友退到圈外,然后他的下一位重新报“1”。这样继续下去

题目详情
Pascal数组问题!急急急!
问题 : 拉手游戏
题目描述
N个小朋友手拉手站成一个圆圈,从第一个小朋友开始循环报数,报到M的那个小朋友退到圈外,然后他的下一位重新报“1”。这样继续下去,直到最后只剩下一个小朋友,他原来站在什么位置上呢?
输入
仅一行,有两个数N和M,其中N表示小朋友的人数,M表示报到数。1输出
仅一个数,留下的小朋友的编号。
样例输入
8 3
样例输出
7
▼优质解答
答案和解析
给你一个Joseph问题的c语言解做参考:
#include
#define N 13
#define S 1
#define M 3
void main( void )
{
short i,pos;
short Queue[N], j=N; //圈中有N个人
short s=S-1; //从第s个人开始依次报数

for(i=0; i Queue[i]=i;
printf("%d个人按顺时针方向围坐一圈,从第%d个人开始依次报数,\n"\
"数到%d的人出圈, 下一个人继续报数,直到所有人出圈为止。\n"\
"这些人的出圈顺序表是:", N, S, M);

i=0, pos=s-1;
do
{
pos++;
if (pos==N) //数到圈尾循环访问
pos=0;
if (Queue[pos]!=-1) //数数
{
i++;
if (i==M) //数到M的人出圈
{
printf(" %d",Queue[pos]+1); //打印出圈人
Queue[pos]=-1; //出圈
--j; //人数减一
i=0; //重新计数
}
}
}while(j>0); //圈中还有人吗?
printf("\n");
}
看了Pascal数组问题!急急急!...的网友还看了以下: