有n(5<=n<=50)个人围成一圈,从1到n顺序排号。从第一个人开始报数(从l到3报数),凡报到3的人退出圈子,依次输出退出的人的编号(%3d格式输出)。要求用指向一维数组元素的指针变量求解本问题。
(思考:若本题只要求输出最后一个退出人的编号该如何修改)
运行参考示例:
输入1:10
输出1: 3 6 9 2 7 1 8 5 10 4
输入2:15
输出2: 3 6 9 12 15 4 8 13 2 10 1 11 7 14
运行代码如下:
#include<stdio.h>
int main()
{
int n;
int i,j=0,a[50]={0};
int m=3;
int s=0;
int *p;
p=a;
scanf("%d",&n);
for(i=0;i<n;i++)
{
a[i]=i+1;//编号
//printf("%3d",a[i]);
}
while(n-s>0)
{
for(i=0;i<n;i++)
{
if(*(p+i)!=0)
{
j++;
if(j%m==0)
{
s++;
printf("%3d",*(p+i));
*(p+i)=0;
}
}
}
}
//for(i=0;i<n;i++)
//if(*(p+i)!=0)
//最后一个人的编号
return 0;
}