数学建模社区-数学中国
标题:
python 解决母亲的奶牛问题
[打印本页]
作者:
2744557306
时间:
2024-3-20 11:38
标题:
python 解决母亲的奶牛问题
题目描述】
g9 h2 K0 n3 F
3 [, L. o3 i( G
农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。
$ H+ @) d! L" |0 ?& E
+ K; e' d4 p5 j8 j
【输入格式】
' Z \; v8 L& j0 i( x
- e w3 q1 A; o8 D
共一行,包含三个整数 A,B,C。
) L: L$ w/ u7 [: B5 X
: C6 E! _/ x7 H. G0 H
【输出格式】
8 q& ~) D+ w* C& L" h
7 S( [$ w- k5 s" q
共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。
0 S1 V+ B: \8 t2 G. T
0 N3 j, Q% D2 f
【数据范围】
' k/ i- A- M2 t) @' d7 ?, t
4 Y# g, |7 @ ?+ {' P( I
1≤A,B,C≤20
! N3 j# |! K7 x# c' a7 C4 T
: W# Q% v) s3 K+ O7 R1 K, E# ]
【输入样例】
6 ]# w9 R2 X: w8 @
Q2 X0 P* |& ^( F
8 9 10
: X6 ~1 o" ~% p+ _! y
【输出样例】
$ @( Y* @3 w' q" Q
9 H1 E& z3 g2 ]& M3 M( J7 c$ ]
1 2 8 9 10
8 u8 m% \1 s$ a$ Z v
【解题思路】
" i4 O, S: m% m. G# i
4 w1 ^1 d. Q( G. T: H9 H/ k: w
BFS简答模拟一下倒牛奶的过程。
from collections import *
+ I- S/ y8 _7 b( d2 a2 B
a,b,c = map(int,input().split())
$ H! v$ F% f7 m+ ^
n = 22
/ M4 ]' U9 \6 O: l
st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]
8 ] @; B" A- I- n' n2 f
/ u/ u# T7 x5 c
q = deque()
. s$ u2 d# R# l( m& F4 m; `; ?% t
def ins(a_,b_,c_):
8 u' N2 Z: \6 Z! c! ~
global q
8 | Q( B, b% J% t6 p& g
if st[a_][b_][c_]:return
2 v' @: U2 S# F, _' \' A. {6 M
q.append([a_,b_,c_])
0 z$ \- q8 M6 G8 k5 u2 D: O
st[a_][b_][c_]=1
. {" F; v- V7 `) r9 h* ~
def bfs():
+ `2 b# W4 v8 K4 D9 r
q.append([0,0,c])
' \" f( o- v7 `2 `6 t
st[0][0][c]=1
: `1 `0 e% `7 F/ t% i* o
while q:
- \+ B Y7 c6 L2 x+ [5 ?2 k" f
a_,b_,c_ = q.popleft()
# B! f1 E2 U/ K! U& e
ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )
+ q% v0 K2 A/ o6 p( i, n
ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )
* ^ M; c. R2 U" P. m$ f
ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )
5 g( a0 j5 o1 v9 I8 n8 ]
ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )
1 `! U4 t8 m# B& r
ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )
; y$ k/ X! R9 L7 `1 A0 c
ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )
z6 L/ r- \" W" h Z
bfs()
" ]# c. ], L' g; E# X) ?
for c_ in range(c+1):
6 D* D$ P0 m3 _ U8 c7 N4 L, u
for b_ in range(b+1):
) F) `) D; j( m* ?) l
if st[0][b_][c_]:
`7 L. v; [. B
print(c_,end=' ')
0 W7 X! n5 O# @; j$ u( f
break
复制代码
" k: d6 i% X; R
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5