|
問題
水を入れる3つの容器があります。
それぞれ6リットル、10リットル、15リットルずつ入ります。途中に目盛りはありません。
この容器を使って、23リットルの水をはかりなさい。
考察
不定方程式±Ax±By±Cz=Nを考える。
たとえば、10x+15y-6z=23のとき、(x,y,z)=(2,1,2)なので、10,10,15,-6,-6
これより、
6 10 15 P
-------------
0 0 0 0
0 10 0 0
0 0 0 10
0 10 0 10
0 0 0 20
0 0 15 20
0 0 0 35
6 0 0 29
0 6 0 29
6 6 0 23
のような単純な操作で実現できる。操作を式で表すと、10+10+15-6-6=23となる。
この場合、10+10+15=35リットルをサーバーからくみ出しているが、
S 6 10 15 P
-------------------
0 0 0 0 0
-10 0 ⑩ 0 0
0 6 4 0 0
0 6 0 0 4
0 0 6 0 4
-4 0 ⑩ 0 4
0 6 4 0 4
0 6 0 0 8
0 0 0 6 8
-9 0 0 ⑮ 8
0 0 0 0 23
-------------------
-23
とすると、ちょうど23リットルのくみ出しになる。
Ax+By-Cz=N≧max(A,B,C)の非負整数解(x,y,z)が、x+y-z>0なら可能となる。(予想)
その他に、
6x+10y-15z=23のとき、(x,y,z)=(3,2,1)なので、6,6,6,10,10,-15
15x+6y-10z=23のとき、(x,y,z)=(1,3,1)なので、15,6,6,6,-10
6x-10y-15z=23のとき、(x,y,z)=(8,1,1)なので、6,6,6,6,6,6,6,6,-10,-15
10x-15y-6z=23のとき、(x,y,z)=(5,1,2)なので、10,10,10,10,10,-15,-6,-6
15x-6y-10z=23のとき、(x,y,z)=(3,2,1)なので、15,15,15,-6,-6,-10
(終り)
LET A=6
LET B=10
LET C=15
LET N=23
CALL Solve(A,B,C,N)
PRINT
CALL Solve2(A,B,C,N)
CALL Solve2(B,C,A,N)
CALL Solve2(C,A,B,N)
PRINT
CALL Solve3(A,B,C,N)
CALL Solve3(B,C,A,N)
CALL Solve3(C,A,B,N)
END
!A,B,C,Nは非負整数とする。不定方程式Ax+By+Cz=Nの非負整数解は、
!By+Cz=N-Ax≧0なので、A=0,1,2,3,…,[N/A]として、By+Cz=Mに帰着させる。
EXTERNAL SUB Solve(A,B,C,N) !Ax+By+Cz=N
FOR X=0 TO N/A
CALL SolveEQU(B,C,N-A*X, Y,Z,K)
IF K=-1 THEN EXIT FOR
NEXT X
PRINT STR$(A);"x+";STR$(B);"y+";STR$(C);"z=";STR$(N)
IF K=-1 THEN PRINT X;Y;Z ELSE PRINT "解なし"
END SUB
!A,B,C,Nは非負整数とする。不定方程式Ax+By-Cz=Nの非負整数解は、
!Ax+By=N+Cz≧0なので、Z=0,1,2,3,…として、Ax+By=Mに帰着させる。
EXTERNAL SUB Solve2(A,B,C,N) !Ax+By-Cz=N
LET Z=0
DO
CALL SolveEQU(A,B,N+C*Z, X,Y,K)
IF K=-1 THEN EXIT DO
LET Z=Z+1
LOOP
PRINT STR$(A);"x+";STR$(B);"y-";STR$(C);"z=";STR$(N)
IF K=-1 THEN PRINT X;Y;Z ELSE PRINT "解なし"
END SUB
!A,B,C,Nは非負整数とする。不定方程式Ax-By-Cz=Nの非負整数解は、
!Ax-N=By+Cz≧0なので、X=0,1,2,3,…として、By+Cz=Mに帰着させる。
EXTERNAL SUB Solve3(A,B,C,N) !Ax-By-Cz=N
LET X=CEIL(N/A) !Ax-N≧0より
DO
CALL SolveEQU(B,C,A*X-N, Y,Z,K)
IF K=-1 THEN EXIT DO
LET X=X+1
LOOP
PRINT STR$(A);"x-";STR$(B);"y-";STR$(C);"z=";STR$(N)
IF K=-1 THEN PRINT X;Y;Z ELSE PRINT "解なし"
END SUB
EXTERNAL SUB SolveEQU(A,B,N, X,Y,K) !Ax+By=Nの非負整数解
LET K=-1
FOR X=0 TO N/A !Ax+By=N
LET Y=(N-A*X)/B
IF Y=INT(Y) THEN EXIT SUB !解
NEXT X
LET K=0 !解なし
END SUB
|
|