たまたんのぶろぐ

たまたんが時たま言いたいことを書いてます。ジャンルはめっちゃええ加減ですwソフトやプログラムのことが多いかもしれませんが。。。。。

数学(プログラム)の時間?

久々にブログ書いちゃいます。いつも通り内容が薄いですが。。。。

 

FB上で出てたロジックの問題です。

なんか気になったんで解いてみました。(・ω・)ノ

 

[問題]

三種の品物a.b.cがあり順に20.15.12円である。

a.b.cを合わせ60個買ったらちょうど1000円になった。

この時a.b.cを買った組み合わせは何通り考えられるか。

なお、a.b.cのうち買わないものがあってもよいとする。

 
まぁ、ループしたら簡単に答えは出るんですけど、
出来るだけ処理を減らす工夫をしなきゃね。
 
連立方程式としては、
a × 20 + b × 15 + c × 12 = 1000
a + b + c = 60
となります。
 
これを解けば良いんですが、
私には紙面上では解けませんエッ( ̄ ̄ ̄ ̄^ ̄ ̄ ̄ ̄)ヘン
つうことでプログラムロジックを作ってみました。
 
単純にa、b、cをそれぞれ0から60まで数を当てはめていきトータルが60以上になったものを計算していくという感じですね。
 
っで、簡単に条件を書くと
1. a+bが60以上になったら計算しない
2. a+b+cが60以上になったら計算しない
3. a+b+cが60の場合計算する。
4. 1.〜3.の条件を満たしたものだけ1000円以上になっているかみる。
 
てな感じですかね。
Cソースを書くと(Cのお手本通りは書いてません)以下の通りです。

#include <stdio.h>

 

#define A_PRICE 20

#define B_PRICE 15

#define C_PRICE 12

 

#define TOTAL(A,B,C) ( (A * A_PRICE) + (B * B_PRICE) + (C * C_PRICE) )

 

int main(int argc, char *argv[]) {

    int count = 0;

    int AllCount = 0;

 

    for(int a = 0 ; a <= 60 ; a++)

    {

        for(int b = 0 ; b <= 60 ; b++)

        {

            // トータル数が60より上の場合は、jのループを中断

            if( ( a + b ) >60 ) break;

            for(int c = 0 ; c <= 60 ; c++)

            {

                // トータル60でなければ次の処理へ

                if( (a + b + c) != 60 ) continue;

                // トータル数が60より上の場合は、kのループを中断

                if( (a + b + c) > 60 ) break;

 

                // ループそうカウント数

                AllCount++;

     

                if( TOTAL (a,b,c) == 1000)

                {

                    // マッチした個数

                    printf("(a,b,c) = (%d,%d,%d)\n",a,b,c);

                    // カウントする

                    count++;

                }

            }

         }

    }

    printf("AllCount=%d\n",AllCount);

    printf("count=%d\n",count);

 

    return0;

}

 
結果は、
(a,b,c) = (20,40,0)
(a,b,c) = (23,32,5)
(a,b,c) = (26,24,10)
(a,b,c) = (29,16,15)
(a,b,c) = (32,8,20)
(a,b,c) = (35,0,25)
AllCount=1891
count=6
 
となり、処理計算は、1891通り調べればよくて答えは、6通りとなりました。
こんなんでいいかな?

 こういうことも当たり前でも復習しておくべきですよね。♪ d(⌒o⌒)b♪