数学建模社区-数学中国
标题:
python 解决母亲的奶牛问题
[打印本页]
作者:
2744557306
时间:
2024-3-20 11:38
标题:
python 解决母亲的奶牛问题
题目描述】
$ n& _2 F! |. } D# u7 l* a0 S6 q
/ w$ s2 z/ Q7 `2 h
农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。
& F. O7 H' u; Q5 U: Z
& H2 T6 [2 {5 n; Y, y
【输入格式】
) y9 O1 z# _: D
, y+ L* L4 d' o) [
共一行,包含三个整数 A,B,C。
* e0 L1 y& w8 e* Q
' b( |: n! G% k0 n& L
【输出格式】
8 _" ^( n! ~& G, j+ f2 B
3 `9 k# [2 c+ |: |8 P. C% R
共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。
9 K" ~( k8 j& v3 M) V6 b
' e' T0 x, c ], n( j
【数据范围】
2 I8 f' Z1 P6 T8 @4 K" B$ ~
. F& x4 b |6 }) p/ h/ B
1≤A,B,C≤20
3 R- a) ]. w2 S8 [
2 K+ H y; o# \( U! L+ p+ P
【输入样例】
7 u- w+ [8 m C5 i* ^0 j
; w+ ^/ u1 L1 N$ y
8 9 10
0 y' s/ u: B% i6 G# S6 Q( V w3 o3 Y
【输出样例】
" L F) U+ ~7 r: t+ c
7 q* U$ d7 |% o! E# @1 p- l; b, h
1 2 8 9 10
& k& U9 s, A" H
【解题思路】
0 a% G) d" q5 T3 j( u$ L
2 [+ P4 ~8 t! K- k
BFS简答模拟一下倒牛奶的过程。
from collections import *
! [( i$ m# K- M
a,b,c = map(int,input().split())
9 `' ]" a/ ]! q2 J1 i3 X9 N
n = 22
5 G/ B1 L1 D4 T0 \- j
st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]
. i! b2 r6 T/ T) Z, l
/ F0 N. l' j9 z- p8 t
q = deque()
: v3 r- ~8 a1 K6 \1 S
def ins(a_,b_,c_):
+ t" o* R H% N3 |0 k
global q
- S# R7 {5 o) O4 R) i
if st[a_][b_][c_]:return
K3 y2 p3 U$ E* P3 I- R
q.append([a_,b_,c_])
0 D6 h5 L( t* Z- Y
st[a_][b_][c_]=1
+ U3 m) V Y: q/ x. Q
def bfs():
4 }- `$ _ h4 O
q.append([0,0,c])
" v; j# F! z1 q* b7 e( z( H
st[0][0][c]=1
# J( H. z& H& T- O
while q:
1 r) e, i, i d% o
a_,b_,c_ = q.popleft()
, J, S* f# {& N- v3 Z5 W1 N( @
ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )
( Q, z% U: l. N
ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )
! @, D0 y) k% {
ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )
8 w9 W; } `0 ^$ L6 D/ F% p4 ~3 e8 |
ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )
; s) t$ V7 T; ^1 }' U
ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )
$ N( ]' \- ?7 r
ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )
& y. C: s" A% z2 ~1 Y
bfs()
) }& }6 L3 b$ @- s( c' Q' |- Z; h
for c_ in range(c+1):
/ s( N/ D% f3 \5 t
for b_ in range(b+1):
) E/ y+ Q. o- ^: O R
if st[0][b_][c_]:
) Q- L% n/ q3 p+ v2 R/ e: p5 x
print(c_,end=' ')
5 P" A+ R% s( u. G9 D2 n6 g
break
复制代码
]% X; U3 M( M0 S
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5