解题思路:写一个函数,该函数从主函数接收一个整数n(即人数),定义一个大小为n的一维数组,定义个一个指向该数组的指针。给该一维数组初始化为从1到n。 设一计数器,按照题述条件,内层循环遍历每一个数组元素,并从1到3报数,若当前元素计数为3则使其置0(即标记该人出局),同时使计数器置0并记录出局人数。如果出局人数为n-1人(即只剩下1人)终止循环,否则由外层循环控制使得再次遍历数组,直到踢出n-1人。最后满足只剩1人的条件后,再次遍历数组,找出那个最终没有被踢出的人,并返回其序号。
下图以7个人为例:
编写程序:
#includeint main(){ int fun1(int n); //函数声明 int n; printf("输入总人数:n"); scanf("%d",&n); //获取人数 printf("最终留下的是%d号",fun1(n)); //函数调用与结果输出 return 0; } int fun1(int n){ int r[n],i,num=0,time=0; int *p=r; //指针初始化 for(i=1;i<=n+1;i++) r[i-1]=i; //将这n个人编号从0~n) while(1){ for(i=0,p=r;i



