朝日新聞2004年9月18日のパズルパーク問題

問題

以下のようなシーソーに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つのみ出力されました。

解速度