C语言指针问题 n人围成一圈,按顺序1-n编号,从第一个人开始报数,报到m(m<n)数的人退 20

/**C语言指针问题n人围成一圈,按顺序1-n编号,从第一个人开始报数,报到m(m<n)数的人退出圈子,下一个人从1继续报数,如此往复直至n=1.编程按顺序输出退出人的编... /**C语言指针问题 n人围成一圈,按顺序1-n编号,从第一个人开始报数,报到m(m<n)数的人退出圈子,下一个人从1继续报数,如此往复直至n=1. 编程按顺序输出退出人的编号。**/

#include<stdio.h>

void del(int[],int,int);

void main()
{
int a[100],m,n,cnt;
int *p;
printf("请输入围成一个圈的总人数:");
scanf("%d",&n);
printf("请输入每到第几号退出圈子:");
scanf("%d",&m);
for(cnt=0;cnt<n;cnt++)
a[cnt]=cnt+1;
cnt=1;
for(p=a;n==1;p++)
{
cnt++;
if(cnt==6)
{
del(a,n,*p);
n--;
cnt=1;
printf("号码为%d的人退出了圈子。\n",*p-1);
}
if(p==&a[n]) p=a;
}
printf("最后留下的人是%d号。\n",*p);
return;
}

void del(int a[],int n,int x)
{
int i,j;
for(i=0;i<n;i++)
{
if(a[i]==x)
for(j=i;j<n;j++)
a[j]=a[j+1];
}
return;
}
//求大神修改一下 尽量我想按照我的思路,我觉得我的思路没有问题, 如果有问题请指出.感激不尽
展开
 我来答
xx_lyq00
2016-06-14 · TA获得超过4140个赞
知道大有可为答主
回答量:1794
采纳率:84%
帮助的人:814万
展开全部
for(p=a;n==1;p++)
{
cnt++;
if(cnt==6) //? 按你的意思,这个应该是 cnt==m吧?
{
del(a,n,*p);
n--;
cnt=1;
printf("号码为%d的人退出了圈子。\n",*p-1);
}
if(p==&a[n]) p=a;
}

void del(int a[],int n,int x)
{
int i,j;
for(i=0;i<n;i++)
{
if(a[i]==x)
for(j=i;j<n;j++)
a[j]=a[j+1]; // 这里溢出, a[n]是不可访问的, 当j = n-1 时,每次循环都会有
}
return;
}
追问
对对  是m 
后面因为我设置的a[100] 应该只要n小于99就不会溢出的
运行之后就是只输出最后的序号,不会输出一个个退出的序号 = =
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式