/* 猴子选大王
思路:所有的猴子都设置为 1 ,删除掉的猴子设置为 0 ,则利用 j 的值来
判断当前是否有猴子。
*/
#include<stdio.h>
#include<stdlib.h>
#define N 5
void show(int *p, int length)
{
for (int i = 0; i < N; i++)
{
printf("%4d", p[i]);
}
printf("\n");
}
void main()
{
int a[N]; // 1:值为1 代表有猴子,0:值为0代表猴子被删除
for (int i = 0; i < N; i++)
{
a[i] = 1;
}
int n = N;
int j = 0;
while (n != 1)
{
for (int i = 0; i < N; i++)
{
j = j + a[i]; //如果等于 3 则把此数设置为 0
if (j == 3)
{
j = 0;
a[i] = 0;
n -= 1;
}
}
show(a, 17);
}
for (int i = 0; i < N; i++)
{
if (a[i] == 1)
{
printf("最终大王编号:%d\n", i);
}
}
system("pause");
}