C♯の勉強

C♯4.0 で TopCoder の過去問を解きます。

TopCoder SRM610: DivideByZero

問題文通り実装するだけだけど、Div2 Easy にしてはやや複雑。

public class DivideByZero {
    public int CountNumbers(int[] numbers) {
        var newElements = (
            from A in numbers
            from B in numbers
            let C = A / B
            where A > B && !numbers.Contains(C)
            select C
        ).Distinct().ToArray();

        if (!newElements.Any()) return numbers.Length;
        return CountNumbers(numbers.Concat(newElements).ToArray());
    }
}