[[20140922131116]] 『決められた平均値になるような組み合わせについて』(まさゆき) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『決められた平均値になるような組み合わせについて。』(まさゆき)

予め決められた平均値があります。例えば14,508
1 12,000
2 14,700
3 16,000
4 19,200
5 11,400
6 13,800
7 15,100
8 18,000
9 10,300
10 11,400
11 13,800
12 15,100
13 16,300
14 12,300
15 13,500
16 14,700
17 17,200
18 18,600
上記の1〜18までの数値を決められた平均値(14,508)になるように組み合わせを行うにはどのような関数を使えばいいのかご教示下さい、宜しくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


18個から,すべての組み合わせを出して平均値をださないといけないのでは?
(Hara) 2014/09/22(月) 14:21

 14,508に1から18をかける場合、その下二けたが「00」になることはないため1から18のどの組み合わせでも平均値が14,508になることはない。

 (A+B)/2 = 14,508
 A+B = 14508*2 = 29,016

 (A+B+C)/3 = 14,508
 A+B+C = 14,508*3 = 43,524

   〜
 (A+B+C+…+Q+R)/18 = 14,508
 A+B+C+…+Q+R = 14,508*18 = 261,144

 1から18のどれも下二けたが「00」なため14,508の倍数の下2桁が「00」のものがないと成り立たない。
(ねむねむ) 2014/09/22(月) 14:30

小数点以下切り捨てで、該当するパターンに○を付ける例。
(122通りあるようですが、合ってます?)

 Sub test()
    Const iMAX = 18
    Const iTARGET = 14508
    Dim i As Long
    Dim j As Long
    Dim iAll As Long
    Dim iAve As Double
    Dim iCou As Long
    Dim iDim(iMAX - 1) As Long
    Dim iC As Long

    iC = 3

    For i = 1 To iMAX
        iDim(i - 1) = Cells(i, 1).Value
    Next i

    For i = 1 To (2 ^ iMAX) - 1
        iCou = 0
        iAll = 0
        For j = 0 To iMAX - 1
            If (i And (2 ^ j)) <> 0 Then
                iCou = iCou + 1
                iAll = iAll + iDim(j)
            End If
        Next j
        If 0 < iCou Then
            iAve = iAll / iCou
            If Fix(iAve) = iTARGET Then
                For j = 0 To iMAX - 1
                    If (i And (2 ^ j)) <> 0 Then
                        Cells(j + 1, iC).Value = "○"
                    End If
                Next j
                iC = iC + 1
            End If
        End If
    Next i
End Sub
(???) 2014/09/22(月) 16:18

皆さん、有り難う御座いました。
非常に参考になりました。
(まさゆき) 2014/09/22(月) 17:38

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.