一堆人报数有关问题退出有关问题,有关问题代码求指点迷津

一堆人报数问题退出问题,问题代码求指点迷津
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>
后面直接跟花括号?????