n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。
输入两个整数n和m,1<=m<=n<=100。
输出猴王的编号
8 37#include
#include
#include
#define N 110
typedef struct monkey
{
int n;
} MK;
void xunhuan(struct monkey p[], int m);//前移
void del (MK p[], int i, int m);//删除结构体成员
int main()
{
MK p[N];
int m, n;
scanf("%d%d", &m, &n);
int i;
for(i = 1; i <= m; i++)
p[i].n = i;//编号
while(m != 1)
{
for(i = 1; i < n;i++)//这样减少了判断
xunhuan(p, m);
del(p, 1, m--);//m函数调用之后,删除了一个结构体内部的元素,结构体成员减去1
}
printf("%d", p[1].n);//首个结构体成员是被保留的,也就是答案
return 0;
}
void xunhuan(MK p[], int m)
{
MK T;
T = p[1];
int i;
for(i = 1; i < m; i++)
p[i] = p[i + 1];
p[m] = T;
}
void del (MK p[], int i, int m)
{
int k;
for(k = i; k < m; k++)
p[k] = p[k + 1];
} | 留言与评论(共有 0 条评论) “” |