Hatena::ブログ(Diary)

NAL-6295の舌先三寸 このページをアンテナに追加 RSSフィード

2008年06月24日(火)

パズル:nまでの整数を二つの組に分けて合計した結果が同じだった2番目と3番目を出力する

問題:1からnまでの整数を二つの組に分けて合計した結果が同じだった2番目と3番目を出力する。

public void nまでの整数を二つの組に分けて合計した結果が同じだった2番目と3番目()
{
    //Enumerable.Select().Sum()は使わない方向で
    Func<int, int, int> xからyまでの計 = (int x, int y) => ((x + y) * ((y - x + 1) / 2)) + (((y + x) / 2) * ((y - x + 1) % 2));

    Func<int, bool> nまでの数字を二つの組に分けて合計した結果が同じ = (int n) => Enumerable.Range(n / 2, n - (n / 2))
                                                                        .Where(分ける数字 => xからyまでの計(1, 分ける数字) == 
                                                                                             xからyまでの計(分ける数字 + 1, n))
                                                                        .Select(x => x).Count() > 0;
   
    int[] 該当するnのリスト = Enumerable.Range(2, int.MaxValue - 2).Where(n => nまでの数字を二つの組に分けて合計した結果が同じ(n))
                                                            .Select(n => n)
                                                            .Take(3).ToArray();

    Console.WriteLine("no2:{0},no3:{1}", 該当するnのリスト[1], 該当するnのリスト[2]);
}

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/NAL-6295/20080624/p2
Connection: close