m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。输出最后退出的是原来的第几号(最初的序号,以1起始)。若m=6,则最后退出的是1号,退出的顺序是 : 3 6 4 2 5 1;若m=10,则最后退出的是4号,退出顺序是: 3 6 9 2 7 1 8 5 10 4;若m=100,则最后退出的是91号,退出顺序是: 3 6 9……100 58 91。
编写函数int fun(int m ,int p[ ])实现上述功能,返回m个人中最后退出人的序号,并将退出的序号顺序写入p指向的数组中。在主函数中输入人数,调用fun后输出实参数组中保存的退出序号。每行输出10个数据。
本问题限定人数m不超过200人。
【输入形式】输入人数(不大于200的整数)
【输出形式】输出最后退出人的序号,以及退出的顺序
【样例输入】:Input numbe:6
【样例输出】:
Last exit person is 1
Exit order:
3 6 4 2 5 1
#include<stdio.h>
void main()
{
int n,la;
int i;
int str[1000];
printf("Input numbe:");
scanf("%d",&n);
la=fun(n,str);
printf("Last exit person is %d\n",la);
printf("Exit order:\n");
for(i=0;i<n;i++)
{ printf("%d ",str[i]);
if((i+1)%10==0)
printf("\n");
}
}
int fun(int m,int *p)
{
int s[10000],last;
int i,j,k,t;
k=0;
t=0;
for(i=0;i<m;i++)
s[i]=i+1;
for(i=0;t<m;i++)
{
for(j=0;j<m;j++)
{ if(s[j]!=0)
{
k++;
if(k%3==0)
{
p[t]=s[j];
t++;
s[j]=0;
k=0;
}
}
}
}
return p[t-1];
}