n个人围成一圈,顺序排号,从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。要求用指针操作数组。
#include<stdio.h>
int main(){
int *p,i,k,tem,sum,n,a[1000];
p=a;
for(i=0;i<1000;i++)
*(p+i)=1; //第i个变量
scanf("%d",&n);
i=0,tem=0,sum=0;
while(sum!=n-1){ //跳出的数量等于 n-1时退出
if(i==n)
i=0;
if(*(p+i)==1){
tem++;
if(tem%3==0){ //数到3 数组赋值0 模拟跳出
*(p+i)=0;
sum++;
}
}
i++;
}
for(i=0;i<n;i++)
if(*(p+i)==1){
printf("最后留下的是第%d位\n",i+1);
break;
}
return 0;
}
int main(){
int *p,i,k,tem,sum,n,a[1000];
p=a;
for(i=0;i<1000;i++)
*(p+i)=1; //第i个变量
scanf("%d",&n);
i=0,tem=0,sum=0;
while(sum!=n-1){ //跳出的数量等于 n-1时退出
if(i==n)
i=0;
if(*(p+i)==1){
tem++;
if(tem%3==0){ //数到3 数组赋值0 模拟跳出
*(p+i)=0;
sum++;
}
}
i++;
}
for(i=0;i<n;i++)
if(*(p+i)==1){
printf("最后留下的是第%d位\n",i+1);
break;
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考