ある問題を作る際に条件として「aとbとcはともに正の整数」を含みたいのですが、どのように表せば良いのですか?お答えおねがいします。ex.a+b+c=1234を満たす…などのような感じです
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
a, b, c が正の整数で a + b + c = N となる組み合わせは
1 2 3 ... N - 1, N の中に仕切りを2つ入れる問題と解釈できるので、組み合わせ数は Comb(N - 1, 2) になります。
例えば、a + b + c = 4 となる組み合わせは
Comb(4 - 1, 2) = Comb(3, 2) = 3通りとなります。
1 | 2 | 3 4 → 1 + 1 + 2 = 4
1 | 2 3 | 4 → ! + 2 + 1 = 4
1 2 | 3 | 4 → 2 + 1 + 1 = 4
【応用】指定した合計値になる整数の組合せ | なかけんの数学ノート
python
1from itertools import combinations 2 3# 組み合わせ数は 19C2 4 5N = 20 6for c1, c2 in combinations(range(1, N), 2): 7 a = c1 8 b = c2 - c1 9 c = N - c2 10 assert a + b + c == N 11 print(f"a = {a}, b = {b}, c = {c}")
a + b + c = 1234 の組み合わせ数は Comb(1233, 2) = 759528 です。
追記
組み合わせ数を列挙するプログラムは上のものでよいですが、
a + b + c = N; a, b, c は正の整数という条件かどうかの判定をしたいのであれば、以下でできます。
python
1def check(a, b, c, N): 2 # すべて整数かどうか 3 all_integer = isinstance(a, int) and isinstance(b, int) and isinstance(c, int) 4 # すべて0より大きい (正の整数) かどうか 5 all_positive = a > 0 and b > 0 and c > 0 6 # 合計が N となるかどうか 7 equals_to_N = a + b + c == N 8 9 return all_integer and all_positive and equals_to_N 10 11print(check(1200, 33, 1, 1234))
追記
a,b,cがゼロも含めてよい(0以上の整数)場合ならばどうなりますかね?
0以上の整数の場合も同様に仕切りをどこに入れるかの組み合わせを考える問題になります。0が許されるので、左端、右端に仕切りを入れる、同じ場所に2枚仕切りを入れることも許されるようになるという違いはありますが、基本は同じです。
python
1from itertools import combinations_with_replacement 2 3N = 20 4 5for c1, c2 in combinations_with_replacement(range(N + 1), 2): 6 a = c1 7 b = c2 - c1 8 c = N - c2 9 assert a + b + c == N 10 print(f"a = {a}, b = {b}, c = {c}")
投稿2019/12/20 12:44
編集2019/12/20 14:14総合スコア21956
0
正の数かどうかは、絶対値と比較すればできます。
整数かどうかは、int(a) == a
のように比較すればできます。
追記
直書きなので自信なし
Python
1def is_positive_integer(x): 2 return x == int(x) and abs(x) == x 3 4if is_positive_integer(a) and is_positive_integer(b) and is_positive_integer(c): 5 # a, b, c は正の整数
Abs が Math に定義されているのは C# だった。
投稿2019/12/20 12:43
編集2019/12/20 12:55総合スコア995
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/20 16:46
2019/12/20 23:40
2019/12/20 23:41
2019/12/21 01:31
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/20 12:54
2019/12/20 12:56 編集
2019/12/20 12:57
2019/12/20 13:03
2019/12/20 13:18
2019/12/20 14:14
2019/12/21 02:21