#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,con=0,i,j=0,t=0;
scanf("%d",&n);
int *a;//创建数组指针
a=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
a[i]=i+1;//给数组赋值编号
while(n-t!=1)//判断剩下的人不等于1
{
if(a[j]!=0)//外层if,比内层if满足条件多,否则停止,如果编号不为0,则报数执行程序
{
con++;//报数的人加1
if(con%3==0)如果报到了3,淘汰
{
a[j]=0;//把每一个淘汰的人编号都赋值为0
t++;//被去除的人增加一个
}
}
j++;//每一次循环过后,判断下一个编号的人
if(j==n) //如果判断到了第n号人,j从0开始
j=0;
}
for(i=0;i<n;i++)
if(a[i]!=0) printf("%d",a[i]);
}
用动态数组处理排号报数问题
于 2023-05-26 10:11:42 首次发布