一道有关C语言的问题题目:1. m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次 存到数组p中,包括最后一个人的序号.到最后只余1人,输出最后留下 的是第几号(最初的序号

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 08:51:46

一道有关C语言的问题题目:1. m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次 存到数组p中,包括最后一个人的序号.到最后只余1人,输出最后留下 的是第几号(最初的序号
一道有关C语言的问题
题目:1. m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次
存到数组p中,包括最后一个人的序号.到最后只余1人,输出最后留下
的是第几号(最初的序号,以1起始).
若m=6,则输出n=1 3 6 4 2 5 1;
若m=10,则输出n=4 3 6 9 2 7 8 5 10 4;
若m=100,则输出n=91…….
函数int fun(int n ,int *p)实现上述功能,返回n个人中最后余的1人
的起始序号,并将退出的序号顺序写入p指向的数组中.


我编的:#include
#include
void NONO();
int fun(int n,int *p)
{
int k=0,i,a[1000],j=1;
for(i=0;i=n)
i=0;
if(k==n)break;

}
return p[k-1];
}
void main()
{int m,*a,i,num;
scanf("%d",&m);
a=(int *)malloc(sizeof(int)*m);
num=fun(m,a);
printf("n=%d\n",num);
for(i=0;i

一道有关C语言的问题题目:1. m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次 存到数组p中,包括最后一个人的序号.到最后只余1人,输出最后留下 的是第几号(最初的序号
while(a[i]==0)i++; //这里会造成数组下标越界 改成 i= (++i)%n;
if(j==3)
{
p[k]=a[i];
a[i]=0;
k++;
j=1;
i++;
}
if(j!=3) //这里要改成 else if 要不然当 j==3 时 执行完 k++ j=1,i++后 由于 j!=3 又要执行一次
//i++; j++;
{
i++;
j++;
}