目录
1用个标志flag=1 ++ 每次flag==3 就退出一个人,flag置零
1.思路
1用个标志flag=1 ++ 每次flag==3 就退出一个人,flag置零
2 需要注意的是把清清零,只是赋值为0 而不是删掉了,遍历数组的时候依旧会过一遍
#include<stdio.h>
#include<stdlib.h>
int main ()
{
int n,i,flag=0;
puts("请输入人数:");
scanf("%d",&n);
//按顺序排号人数
int *arr=(int*)malloc(sizeof(int)*n);
if(arr==NULL)
{
perror("malloc");
return 1;
}
for(i=0;i<n;i++)
{
arr[i]=i+1;
}
//保留当前原始人数
int count = n;
//人数大于1的时候进去,人数等于1了就不用进去了
while(n>1)
{
for(i = 0 ; i < count ; i++)
{
if(arr[i]!=0)
{
flag++;
//位置上的人没有被清零就报数
//报数到三就被清零,flag重置,人数减一
//
if(flag==3)
{
flag=0;
arr[i]=0;
n--;
}
}
}
}
//输出剩下的一个人
for(i=0;i<count;i++)
{
if(arr[i])
{
printf("最后剩下的人是:%d\n",arr[i]);
}
}
//释放内存
free(arr);
arr=NULL;
return 0;
}
2.效果图