🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

933閲覧

Pythonについて(初学者)

nobi0820

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

0クリップ

投稿2019/12/20 12:21

ある問題を作る際に条件として「aとbとcはともに正の整数」を含みたいのですが、どのように表せば良いのですか?お答えおねがいします。ex.a+b+c=1234を満たす…などのような感じです

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobi0820

2019/12/20 12:54

ご回答ありがとうございます。さっそく実際にコードを入力して確かめてきます。ちなみにN=20とはa+b+c=20の場合ですか?理解できてなくてすみません????
tiitoi

2019/12/20 12:56 編集

a + b + c = 20 の場合です。 a, b, c が整数で合計がNの場合について、 組み合わせの合計を求めたいのか、具体的にすべての組み合わせを求めたいのか、組み合わせのうちの1つでもわかればいいのかでやり方が違ってきますが、どれでしょうか。
nobi0820

2019/12/20 12:57

正の整数a、b、cの組全てです!
tiitoi

2019/12/20 13:03

組み合わせの列挙であれば、最初に書いたコードでできますが、単に a, b, c が与えられたとき、質問の条件を満たすかどうかを True/False で返す関数ということであれば、追記したように書けます。
nobi0820

2019/12/20 13:18

ご丁寧にコードまで教えてくださいましてありがとうございます。趣旨としてはtiitoiさんが最初に書いてくださったのであっております。 何度もすみませんが、a,b,cがゼロも含めてよい(0以上の整数)場合ならばどうなりますかね?正の整数ならば正しく実行されました。例:a+b+c=10を満たす0以上の(a,b,c)の組の数を求められるプログラムは?このとき(a,c,c)=(10,0,0)や(9,0,1)は可とする
nobi0820

2019/12/21 02:21

おはようございます。返信が遅くなり申し訳ありません。算数の仕切りの問題と同様に扱えばよかったのですね!無事解決しました。ありがとうございました。またよろしくお願いします。
guest

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
Q71

総合スコア995

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobi0820

2019/12/20 12:48

ご回答ありがとうございます。では「aかつbかつcが整数」ならばint(a)and…と3つ並べれば良いのですか?ちなみに絶対値と比較とは具体的にはどのようにするのですか?
aoies

2019/12/20 16:46

横槍ですが。 a==abs(a)なら正の整数、みたいな感じだと思います。 それか、a>=0がわかりやすいかもしれません。条件はandでつなげていけば良いです。
Q71

2019/12/20 23:41

Microsoft Store から Python 3.7.5 をダウンロードして実行した結果 Python 3.7.5 (tags/v3.7.5:5c02a39a0b, Oct 15 2019, 01:31:54) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> abs(-3.5) 3.5 >>>
aoies

2019/12/21 01:31

書き方が悪かったかもしれません。正の数かをabsで判定。整数かをintで判定ではないですか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問