一堆人报数有关问题退出有关问题,有关问题代码求指点迷津
一堆人报数问题退出问题,问题代码求指点迷津
20. n个人围成一圈,1,2,3循环报数,报到3的人退出。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若n=6,则输出1;若n=10,则输出4;若n=100,则输出91。函数int fun(int n)实现上述功能,返回n个人中最后余的1人的起始序号。
#include <stdio.h>
#include <stdlib.h>
{
int i,t,b;
int *a=(int *)malloc(sizeof(int)*(n+1));
for(i=1;i <=n;i++)
a[i]=1;
for(i=1,b=0,t=0;;i++)
{
if(a[i]==1)
{
b++;
if(b==3)
{
b=0;
t++;a[i]=0;
}
}
if(t==n-1) break;
if(i==n) i=0;
}
for(i=1;;i++)
if(a[i]==1) break;
free(a);
return(i);
}
void main()
{int m;
scanf( "%d ",&m);
printf( "n=%d\n ",fun(m));
}
旧得快烂掉的题,以前用静态数组做可以正常输出结果,但是现在用动态数组运行都不通过,报错Declaration syntax error,并且提示在定义和#include <stdio.h> 之间,就是不知道怎么修正错误,希望诸位高手指点下,第一次发帖,谢谢了
------解决方案--------------------
#include <stdlib.h>
后面直接跟花括号?????
20. n个人围成一圈,1,2,3循环报数,报到3的人退出。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若n=6,则输出1;若n=10,则输出4;若n=100,则输出91。函数int fun(int n)实现上述功能,返回n个人中最后余的1人的起始序号。
#include <stdio.h>
#include <stdlib.h>
{
int i,t,b;
int *a=(int *)malloc(sizeof(int)*(n+1));
for(i=1;i <=n;i++)
a[i]=1;
for(i=1,b=0,t=0;;i++)
{
if(a[i]==1)
{
b++;
if(b==3)
{
b=0;
t++;a[i]=0;
}
}
if(t==n-1) break;
if(i==n) i=0;
}
for(i=1;;i++)
if(a[i]==1) break;
free(a);
return(i);
}
void main()
{int m;
scanf( "%d ",&m);
printf( "n=%d\n ",fun(m));
}
旧得快烂掉的题,以前用静态数组做可以正常输出结果,但是现在用动态数组运行都不通过,报错Declaration syntax error,并且提示在定义和#include <stdio.h> 之间,就是不知道怎么修正错误,希望诸位高手指点下,第一次发帖,谢谢了
------解决方案--------------------
#include <stdlib.h>
后面直接跟花括号?????