AOJ : 0221 - FizzBuzz
アルゴリズム
Javaで解きました.
ArrayListに, 1~mまでを突っ込んで, 残っている人を管理しました.
現在発言している人のArrayListにおけるインデックスを保持して, 間違った発言をしたならremove, していないならそのまま次の人へ発言権を渡す, みたいな感じでやりました.
問題文が修正される前に, いろいろ怪しいと思って書き換えていたので, BigIntegerとか使ってますが, 気にしないでくださいw
プログラム
import java.util.*; import java.math.BigInteger; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(true){ int m = sc.nextInt(); int n = sc.nextInt(); if(m == 0 && n == 0) break; ArrayList<Integer> rem = new ArrayList<Integer>(); for(int i=1;i<=m;i++) rem.add(i); int now = 0; for(int i=1;i<=n;i++){ String s1 = ""; if(i % 3 == 0) s1 += "Fizz"; if(i % 5 == 0) s1 += "Buzz"; if(i % 3 != 0 && i % 5 != 0) s1 += i; String s2 = sc.next(); boolean flg = true; //true:数字だけで構成された文字列である for(int j=0;j<s2.length();j++){ if(s2.charAt(j) < '0' || '9' < s2.charAt(j)){ flg = false; break; } } if(flg){ s2 = new BigInteger(s2).toString(); } if(!s1.equals(s2) && rem.size() > 1){ rem.remove(now); now--; } now = (now + 1) % rem.size(); } System.out.println(rem.toString().replaceAll("\\[|\\]|,","")); } } }