int main()
{
int n;
scanf("%d",&n);
int a[100],*p;
p=a;//a的首元地址
for(int i=0;i<n;i++)
{
*(p+i)=i+1;//如:输入5,这时数组里的数值就为[1,2,3,4,5]
}
int j=0;//偏移量
int k=0;//报数
int m=0;//记录退出的人数
while(m<n-1)//当退出人数达到n-1个时就不再循环,剩下的那个数就是报数后剩下的
{
if(*(p+j)!=0)//如果该数不等于0,就往后继续报数
{
k++;
}
if(k==3)//如果报数为3时
{
*(p+j)=0;//将报数折置为0
m++;//退出人数加一
k=0;//k重置为0
}
j++;//继续报数
if(j==n)//如果报到最后一个数时,最后一个数置0并从头开始时宝树
j=0;
}
for(int i=0;i<n;i++)
{
if(*(p+i)!=0)//查找不是0的数,即为最后剩下的数
printf("剩下的是%d号",*(p+i));
}
}
1.定义一个指针p,将其指向数组a的首元地址,即p=a.(这里推荐搞不懂指针的看看b站bite鹏哥的c语言,我也是从那来的)
2.报数人报到3就将其置0并记录退出人数,再继续往下重新报数,报到最后一位就重新回到前面开始遍历,如果等于0就跳到下一个数。
3.while条件记录的是退出人数小于总人数-1的情况,因为报数到最后就会剩下一个人,那么那个人就是我们要找的数啦。
4.最后一步就是遍历该数组,里面不为0的数就将他打印出来。
---------------------------------------------------------------------------------复试顺顺利利,结膜炎快快好起来!
本文解析了一段C语言代码,通过报数游戏规则,找出数组中最后一个未被置零的数。关键步骤包括指针操作、条件判断和数组遍历。适合理解指针和算法的初学者。
,凡报到3的人退出圈子,问最后留下的是原来第几号的那位。&spm=1001.2101.3001.5002&articleId=123660726&d=1&t=3&u=2d92187d01ff42b89c3a6006347844d0)
2434

被折叠的 条评论
为什么被折叠?



