Problem 0221 : FizzBuzz
問題概要
日本語なので本文参照(http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0221&lang=jp)
m人の人がnまでの数をFizz Buzzした記録が与えられる。
間違った人が脱落していくとして、最後に残っている人の番号を昇順に出力せよ。
解法
シミュレート。
ソースコード
int n,m; char in[99]; int main() { while(scanf("%d%d",&m,&n),m){ int r=m,c=0; bool a[1000]; rep(i,m)a[i]=1; for(int i=1;i<=n;i++){ for(;!a[c];c=(c+1)%m); scanf("%s",in); if(r==1)continue; if(i%15==0){ if(strcmp(in,"FizzBuzz"))a[c]=0,r--; } else if(i%5==0){ if(strcmp(in,"Buzz"))a[c]=0,r--; } else if(i%3==0){ if(strcmp(in,"Fizz"))a[c]=0,r--; } else{ if(!isdigit(in[0])||atoi(in)!=i)a[c]=0,r--; } c=(c+1)%m; } bool f=1; rep(i,m)if(a[i]){ if(!f)putchar(' '); else f=0; printf("%d",i+1); } puts(""); } return 0; }