#include<stdio.h>
#include<math.h>
int del(int *p,int m,int n);
int main()
{
int m;
while (1)
{
scanf("%d",&m);
int a[50]={0};
if(m<20&&m>0)
{
printf("%d\n",del(a,m,20));
}
}
return 0;
}
int del(int *p,int m,int n)
{
int x=0,k=0,i;
for( i=0;i<n;i++)
*(p+i)=1;
while (x<n-1)
{
for( i=0;i<n;i++)
{
if(*(p+i)==1)
{
k++;
if(k==m)
{
x++;
*(p+i)=0;
k=0;
}
}
}
}
for( i=0;i<n;i++)
if(*(p+i)!=0)
break;
return i+1;
}
没问题啊
你一开始把数组元素全都设置为0了,所以循环20次,当i=20时跳出for循环,此时i+1=21被返回
注释掉break的时候,你的return就进入if了,因为最后一个for循环的if一直没有生效,所以返回的是寄存器中的某个特定值,这里因为一直在运算i,所以最后返回的是20