#仅为个人学习记录,如有错误请指正。
1.题目
题目描述:有n
人围成一圈,顺序排号。从第1
个人开始报数(从1
到3
报数),凡报到3
的人退出圈子,问最后留下的是原来的第几号的那位。 ####相关知识(略) ####编程要求 请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入
初始人数n
输出
最后一人的初始编号
####测试说明
样例输入:
3
样例输出:
2
开始你的任务吧,祝你成功!
2.解法
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int step,i,j,n;
scanf("%d",&n);
int man[n];
for(int k=0;k<n;k++){
man[k]=k+1;
}
int sum=n; #sum记录还剩的人数;
step=0;i=0; #step记录人报数的数字,即1,2,3;
while(sum!=1){
if(man[i]!=0){
step++;
}
if(step%3==0&&step!=0){ #此处一定要用step!=0再次限定,因为上面的if不一定实现;
man[i]=0;
sum--;
step=0;
}
if(i==n-1){
i=-1; #此处i赋值为-1是为了i++后i从0开始,即从man[0]开始遍历数组;
}
i++;
}
for(int j=0;j<n;j++){
if(man[j]!=0){
printf("%d",man[j]);
}
}
/*********End**********/
return 0;
}
看了其他博主的文章有用结构体解题,但那我自学的不咋样,所以就尝试用我更擅长的数组来解题,如有错误恭请指正。