/*
*Copyright(c)2017,烟台大学计算机学院
*All right reserved.
*文件名称:20171116.cpp
*作者:李小同
*完成日期;2017年11月16日
*版本号;v1.1
*
*问题描述:如下
*输入描述:功能需求
*程序输出:所需功能的实现
*/
一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王。输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号猴子。
要求采用数组作为存储结构完成。
king.h:
#ifndef KING_H_INCLUDED
#define KING_H_INCLUDED
#include<stdio.h>
#define MaxSize 8
void king(int m,int n);
#endif // KING_H_INCLUDED
king.cpp:
#include"king.h"
void king(int m,int n)
{
int p[MaxSize];//MaxSize==8
int i,j,t;
for(i=0;i<m;i++)//构建初始序列,记录m只猴子在圈子中
p[i]=1;
t=-1; //第一只猴子
printf("出列顺序:");
for(i=1;i<m;i++)
{
j=1; //第一只猴子的编号为1
while(j<=n)
{
t=(t+1)%m;//第一次循环t==0
if (p[t]==1)//猴子在圈子中,j才++
j++;
}
p[t]=0;猴子出
printf("%d",t+1);
}
}
main.cpp:
#include "king.h"
int main()
{
int m,n;
scanf("%d %d",&m,&n);
king(m,n);
return 0;
}
运行结果: