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;
}
//求大神修改一下 尽量我想按照我的思路,我觉得我的思路没有问题, 如果有问题请指出.感激不尽 展开
#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;
}
//求大神修改一下 尽量我想按照我的思路,我觉得我的思路没有问题, 如果有问题请指出.感激不尽 展开
1个回答
展开全部
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;
}
{
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就不会溢出的
运行之后就是只输出最后的序号,不会输出一个个退出的序号 = =
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询