和が22および33にする

 投稿者:山中和義  投稿日:2013年 1月 7日(月)11時00分44秒
  問題
1から10までの10個の数を5個ずつ2組に分ける。それぞれの組で和が22および33になるようにする。
どのように分ければよいか。

{1,3,5,6,7}=22と{2,4,8,9,10}=33

答え
  1 +2 +3 +4 +5
+ 10 +9 +8 +7 +6
-------------------
  11+11+11+11+11 = 11*5 = 55
より、
和が11になる組の5通りから、その内の2組ずつを使って、22をつくる。
たとえば、
 {1,10, 2,9}=22
 {3, 8, 4,7}=22
とする。
残りの1組をどちらかに加える。
 {1,10, 2,9, 5,6}=33
 {3, 8, 4,7}=22
22と33ができるが、6個と4個で個数が合わないので、
交換して個数を±1にする1+6=7に着目して、
 {7,10, 2,9,   5}=33
 {3, 8, 4,1,6}=22
とすればよい。
(終り)


別解
小町算
 +1±2±3±4±5±6±7±8±9±10=±(33-22)=±11
の解で、左辺の+と-の個数が同じもの
(終り)


LET N=9 !左辺の+が5つ
LET R=4
CALL CombBit(N,R, 0) !2進法n桁、r個のビットが1
END

EXTERNAL SUB CombBit(N,R, Bit) !n個の中からr個を選ぶ組み合わせをビットで表す ※辞書式順序
IF N=R THEN
!!PRINT Bit+2^R-1 !ビットパターンを生成する
   CALL stub(Bit+2^R-1)
ELSEIF N>0 THEN
   CALL CombBit(N-1,R,Bit)
   CALL CombBit(N-1,R-1,Bit+2^(N-1))
END IF
END SUB

!小町算「+1±2±3±4±5±6±7±8±9±10=±11、左辺の+と-の個数が同じもの」を解く
EXTERNAL SUB stub(Bit)
LET t=Bit !左辺を計算する
LET S=1 !1の前は+のみ
FOR K=10 TO 2 STEP -1 !進数変換でパターンを得る
   IF MOD(t,2)=1 THEN LET S=S+K ELSE LET S=S-K !ビットが1なら和
   LET t=INT(t/2)
NEXT K
IF ABS(S)=11 THEN PRINT BSTR$(2^9+Bit,2) !±11なら、条件を満たす
END SUB



別解
 問題
 1≦a<b<c<d<e≦10とする整数の組(a,b,c,d,e)がある。
 a+b+c+d+e=22(または33)を満たすものはいくつあるか。
として、不定方程式を解く。
1≦a<b<c<d≦10なる整数として、a+b+c+d+e=22を考える。
 5a<a+b+c+d+e=22より、a<22/5
 4b<b+c+d+e=22-aより、b<(22-a)/4
 3c<c+d+e=22-(a+b)より、c<(22-(a+b))/3
 2d<d+e=22-(a+b+c)より、d<(22-(a+b+c))/2
なので、組(a,b,c,d)を求めると、
 (1,2,3,6,10) (1,2,3,7,9) (1,2,4,5,10) (1,2,4,6,9) (1,2,4,7,8)
 (1,2,5,6,8) (1,3,4,5,9) (1,3,4,6,8) (1,3,5,6,7) (2,3,4,5,8)
 (2,3,4,6,7)
の11通りとなる。


FOR a=1 TO 22/5
   FOR b=a+1 TO (22-a)/4
      FOR c=b+1 TO (22-(a+b))/3
         FOR d=c+1 TO (22-(a+b+c))/2
            LET e=22-(a+b+c+d)
            IF e>d AND e<=10 THEN PRINT a;b;c;d;e
         NEXT d
      NEXT c
   NEXT b
NEXT a
END

 

戻る