|
問題
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
|
|