题目:有 n 个人围成一圈, 顺序排号。 从第一个人开始报数(从1 到 3 报数),凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位?
#include<stdio.h>
#include<stdlib.h>
#define NUM 3
int main()
{
int m;
printf("Please Enter the number of player:\n");
scanf("%d",&m);
int *array = (int *)malloc((m+1)*sizeof(int));
if(array == NULL) {
printf("Memory alloc failed.\n");
return -1;
}
int sum_player = m;//记录当前有多少人参与游戏
for(int i=1;i<m;i++)
array[i] = i+1;
array[m] = 1;
/*定义一个整型数组array[i],第i个元素存放下一个元素的下标*/
int current_index = 1;
int previous_index = 0;
while(sum_player > 1) {
int inner_i = 1;
while(inner_i <= NUM) {
if(inner_i == NUM) {
printf("%d is fired.\n",current_index);
array[previous_index] = array[current_index];
previous_index = current_index;
current_index = array[current_index];
inner_i++;
sum_player--;
break;
}
inner_i++;
previous_index = current_index;
current_index = array[current_index];
}
}
printf("\nLeft num is:%5d\n",current_index);
return 0;
}
``