質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

671閲覧

C言語で条件に合う組み合わせを全て表示したい

tunt

総合スコア14

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2018/08/08 00:27

最近C言語を勉強し始めたC言語初心者です。
C言語を使用して、以下のようなコードを書きたいのですが、どうしたらいいのかさっぱりわかりません。

書きたいコード
・オレンジジュース・ソーダ・コーラを併せて20本で2600円(税別)になるようにする。
・全ての組み合わせを表示する。
※オレンジジュース:1本120円(税別)、ソーダ:1本130円(税別)、コーラ:1本150円(税別)

ヒントだけでも構わないので、どなたかご教授お願いいたします。

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

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

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

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

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

guest

回答3

0

とりあえず全列挙しても8000通り位なので余裕

c

1const int orange_price = 120, 2 soda_price = 130, 3 cola_price = 150; 4const int target_price = 2600; 5for(int orange = 0; orange <= 20; orange++){ 6 int total_orange_price = orange_price * orange; 7 for(int soda = 0; soda * soda_price + total_orange_price <= target_price; soda++){ 8 int total_price_without_cola = soda * soda_price + total_orange_price; 9 for(int cola = 0; cola * cola_price + total_price_without_cola <= target_price; cola++){ 10 int total = cola * cola_price + total_price_without_cola; 11 if(total == target_price && orange + soda + cola == 20) 12 printf("%d, %d, %d\n", orange, soda, cola); 13 } 14 } 15}

さらに、3つ目のforループはよく考えるとループさせる必要がない


もしくは、連立方程式を解く

120orange + 130soda + 150*cola = 2600
orange+soda+cola = 20

下の式を両辺130倍して
130o+130s+130c = 2600
上の式から引くと
-10
o+20*c = 0
整理して
2c = o
なので

c

1for(int c = 0; c <= 6; c++){ 2 int o = c * 2; 3 printf("%d, %d, %d\n", o, 20 - (o+c), c); 4}

投稿2018/08/08 01:08

編集2018/08/08 01:18
asm

総合スコア15147

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

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

tunt

2018/08/08 01:16

回答ありがとうございます。 コードの解説まで・・・ ありがとうございます。 すごくわかりやすいです。 参考にさせていただきます。
guest

0

単純に算数でこの答えを求める方法を、暗算無しで全部書きましょう。
そのあと、それをそのままコードに書き直せばいいだけです。

投稿2018/08/08 00:43

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tunt

2018/08/08 00:51

どうやら難しく考えすぎていたようです。 そのままだったのですね。 ご回答ありがとうございました。
guest

0

ベストアンサー

ジュース、0から20のループを作って、
その中でソーダ0から20のループを作る。
ジュース+ソーダが20本を超えたらパス
んで、残りの本数をコーラとして値段をチェック。

という処理を組めばいいですね

投稿2018/08/08 00:38

y_waiwai

総合スコア87747

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

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

tunt

2018/08/08 00:50

あ、なるほど どうやら難しく考えすぎていたようです。 ご回答ありがとうございました。 的確な回答及び、スピードから、ベストアンサーにさせていただきます。
ttyp03

2018/08/08 00:56

3種類あわせて20本だから、ループとしては1~18の方がよさそうです。
tunt

2018/08/08 01:13

なるほど、そうですね。 全く気づきませんでした。 すごく勉強になります。 ありがとうございます。
YAmaGNZ

2018/08/08 01:17

合わせて20本なら、0+0+20とかもありえるのでは?
tunt

2018/08/08 02:37

そうですね。あり得ますね・・・ とりあえず20まででやってみます。 ありがとうございます。
ttyp03

2018/08/08 02:52

必ず一本以上含むわけではないのですね。 それなら0~20です。
tunt

2018/08/08 04:43

そうですね。 でも一応両方のパターンでやってみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問