数学建模社区-数学中国

标题: python 解决母亲的奶牛问题 [打印本页]

作者: 2744557306    时间: 2024-3-20 11:38
标题: python 解决母亲的奶牛问题
题目描述】' a7 A, h9 t% V) e

6 `5 _, I9 f2 o, ^# u0 k  P        农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。$ M. a  |% N8 H$ A4 w# m6 I
! [4 ^' V8 Y& @. r5 G/ \
【输入格式】
1 [, A$ f! n; o5 W- k1 [3 f- V
        共一行,包含三个整数 A,B,C。
) M# B7 z! X8 w! n: C0 F7 v8 ]! d- y- c: b$ O3 V7 x
【输出格式】
& U6 g8 F) V0 Z8 Q
: C0 v. B% X6 P7 P; J2 J) v        共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。
- G" F; k6 Y/ ], o( q1 o# f. g9 X- M, \, ?$ |; S. N) h
【数据范围】
4 d0 r4 g7 Y: i& S0 m  n1 r7 b+ Z9 G8 J* T* o! d
        1≤A,B,C≤20
' }; L* w- p0 ^% s/ e
0 G7 c- S0 B$ o, T, l) U2 B【输入样例】/ F, a# X7 s5 r  T; G, T
$ w7 I* e0 A" ]: a. b+ s
8 9 10
( G' g0 N1 b: O5 T# s( Q【输出样例】
, w, V( V+ h1 s/ c8 m( |
' @5 L0 h4 O) Q, R: L$ A1 2 8 9 10
7 b  }" u- R+ E  ]2 i7 W" f 【解题思路】1 P$ _% ~' k8 v+ J9 J; L1 ?
" q( \  t. L9 A! r5 a9 d
        BFS简答模拟一下倒牛奶的过程。
  1. from collections import *
    8 x: f+ A3 f  z4 c7 }
  2. a,b,c = map(int,input().split())" K, k9 \1 v2 Z. u' g* o" P2 ?$ K$ t
  3. n = 22/ M( Z' [3 X! Z/ y' d$ R; l3 x. G
  4. st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]
    + |1 i+ l7 A  R" c( C5 q0 ]4 h

  5. , Y" t3 ~. K* n* i+ J
  6. q = deque()+ x& `) \7 A' Y/ F
  7. def ins(a_,b_,c_):+ b/ g4 G& Y, G; F6 P2 f
  8.     global q
    ' @4 m- x1 h7 \# ]8 B, p) g/ f
  9.     if st[a_][b_][c_]:return- F7 @3 a. G+ E7 p! a4 \6 Y' Q% O
  10.     q.append([a_,b_,c_])0 d" K5 M1 C  A( L
  11.     st[a_][b_][c_]=1+ [9 p0 V4 Z% l8 y% T3 }
  12. def bfs():, ], F2 D  B& \* ^/ T
  13.     q.append([0,0,c])
    3 Z; Y# F* _% }/ S
  14.     st[0][0][c]=11 _9 }5 r( q7 w! H
  15.     while q:
    0 f- j0 |& z0 G  h0 l
  16.         a_,b_,c_ = q.popleft()- ]* h' N  r  \8 k6 m  |' v1 S, A
  17.         ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )
    0 N1 Q3 l) H+ N
  18.         ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )
    , ]2 f8 a/ G% o) V  w$ s+ l+ j. Q1 E
  19.         ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ ). y% l& r/ b$ |0 q; `+ I* H# A
  20.         ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )
    ( q* k9 O  p$ N7 T( M& \* ^7 W$ k
  21.         ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )" W9 s, C! K. {) f0 N
  22.         ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )5 o4 A7 Z: r0 W. B8 p  k' x4 U
  23. bfs()
    2 J4 J3 N1 @  ]" k5 @& a
  24. for c_ in range(c+1):4 |; L2 N$ T: w# F
  25.     for b_ in range(b+1):0 w2 q6 c+ z6 y" C/ I+ C" C
  26.         if st[0][b_][c_]:- G2 n. v9 ]: u' W2 d) d5 l
  27.             print(c_,end=' ')# T& ?0 F: V3 Y9 P0 f( I8 s
  28.             break
复制代码
' x! X* J& ^7 K$ P* u; r# Y! ~) t





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5