python
1while True: 2 n, x = map(int, input().split()) 3 if n == x == 0: 4 break 5 6 cnt = 0 7 8 for a in range(1, x // 3): 9 for b in range(a + 1, x // 2): 10 c = x - a - b 11 if b < c <= n: 12 cnt += 1 13 14 print(cnt)
上のコードはAIZU ONLINE JUDGEの問題の解法をググって出てきたコードです。
https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/7/ITP1_7_B ←問題
組み合わせの数 1 から n までの数の中から、重複無しで3つの数を選びそれらの合計が x となる組み合わせの数を求めるプログラムを作成して下さい。 例えば、1 から 5 までの数から3つを選んでそれらの合計が 9 となる組み合わせは、 1 + 3 + 5 = 9 2 + 3 + 4 = 9 の2通りがあります。 Input 複数のデータセットが入力として与えられます。各データセットでは、空白で区切られた n、x が 1 行に与えられます。 n、x がともに 0 のとき入力の終わりとします。 Constraints 3 ≤ n ≤ 100 0 ≤ x ≤ 300 Output 各データセットについて、組み合わせの数を1行に出力して下さい。
https://pontz-rw.hatenablog.jp/entry/2017/07/30/000000 ←解法がのっていたブログ
とてもコンパクトにまとまっていて凄いと思うのですが、なぜ「b < c <= n」が成り立つときcntをインクリメントするのかがわかりません。ブログにコメントで伺おうと思ったのですが、コメント機能が使えませんでした。
ぜひ、教えていただけれると助かります。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー