以下のようなシーソーに60Kg,70Kg,80Kg,90Kg,100Kg,110Kgの人を乗せてバランスを取るにはどこに何Kgの人を乗せれば良いか。
今日は姪っ子の運動会。
簡単な虱潰し問題ですが,その前にシーソーがバランスを取るためにの条件を確認しておく。
以下のシーソーがある時,このシーソーがバランスを取るには
X*x = Y*y
とならなければならない。距離*重さ が等しくなることが必要。
今回の左側の距離*重さの合計は
a * (5+3+1) + b * (3+1) + c
右側の距離*重さの合計は
f * (6+4+2) + e * (4+2) + d*2
となる。バランスするには以下の式が成り立たねばならない。
a*9 + b*4 + c = f*12 + e*6 + d*2
a,b,c,d,e,f には 60,70,80,90,100,110 を虱潰しに割り当てる。
数値の割り当て問題のうちa,b,c,d,e,fまでを切り出して使用する(ループの上限を10から6に変更する)。
int w[6] = {60,70,80,90,100,110}; // 各人の重さ
として,制約条件を以下のように定義する。
// a*9 + b*4 + c = f*12 + e*6 + d*2 if( w[a]*9 + w[b]*4 + w[c] == w[f]*12 + w[e]*6 + w[d]*2) { ps( "Find : A:%3dKg, B:%3dKg, C:%3dKg, D:%3dKg, E:%3dKg, F:%3dKg\n", w[a], w[b], w[c], w[d], w[e], w[f]); }
答えは1つのみ出力されました。
解速度
即