有50人围成一个圈,按顺序编号,从第一个人开始报数(从1到m报数,m>=2),凡是报到m的人退出圈子,问最后留下的那位的原编号。
#include<stdio.h>
int main(){
int sz[50],m;
for(int i=0;i<50;i++){
sz[i]=i+1;
}
printf("输出你想要去除的数:\n");
scanf("%d",&m);
int *p,*pl;
p=sz;
pl=sz+50;
int i=1;
while(1){
for(;;p++){
if(p==pl){
p=sz;
}
if(i==m){
*p=0;
i=0;
}
if(*p!=0) i++;
}
int sum;
for(sum=0;p<pl;p++){
if(*p!=0){
sum+=1;
}
}
if(sum==1) {
break;
}
}
for(int i=0;i<50;i++){
if(sz[i]!=0) printf("%d",sz[i]);
}
return 0;
}
无法跳出循环
for(;;p++){
if(p==pl){
p=sz;
}
if(i==m){
*p=0;
i=0;
}
if(*p!=0) i++;
}
这天生就是个死循环啊。你都没有任何结束条件