QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2527|回复: 0
打印 上一主题 下一主题

python 解决母亲的奶牛问题

[复制链接]
字体大小: 正常 放大

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:38 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】" V( {" Y- w7 i7 ?# p' c
& i8 s) i- I7 D, ]( f0 c
        农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。
1 b# k( [& n% `: P3 E- w9 _% w% h9 [" ^+ b
【输入格式】1 I7 O& x+ G4 _

6 \4 s. e& O$ \" M        共一行,包含三个整数 A,B,C。
. H* O7 d+ H) X0 j6 f
' D5 Q$ ^5 q6 Z0 a! B- \# f/ P# j$ \【输出格式】0 Y* F& I% q  [9 I0 N

6 F: _  M( J& i7 V/ s$ b        共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。6 w" N) w* D! ^! t! i6 F/ j( _

; v8 A: r; B, A0 Q2 {【数据范围】
# Y" f4 @% ~, k& P$ I7 j2 e  x$ |* S$ \! D
        1≤A,B,C≤20* |  Y% a4 C! w: f
3 w; ?; Q( l' x9 I2 u. c
【输入样例】4 o0 y5 M$ }- R2 ~
' m' z( B0 U8 s
8 9 10) s5 E  @) d9 Q1 Z- a5 z' a
【输出样例】
& G2 r' b9 `. K
3 y- A' g$ D- s1 2 8 9 10
3 ], f/ @+ @- j( ]2 u) @" U 【解题思路】- r" m0 H. \/ E/ Y6 A- x) }/ \9 L' o

; S* ]5 z% Y: K9 D" f  g        BFS简答模拟一下倒牛奶的过程。
  1. from collections import *
    0 D. I* N/ _/ {- `# c9 H
  2. a,b,c = map(int,input().split())' n' t+ ^' t) z( H! ?9 s
  3. n = 226 {) D% y9 {# h. G1 t
  4. st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]  O& p+ |( @' f2 B% c  t
  5. & }4 `5 Z8 J( k* n6 c' }
  6. q = deque()
    ; a\" h; |9 `# D) I. e
  7. def ins(a_,b_,c_):
    , x: g$ n, l& a+ a/ n
  8.     global q& ~3 g1 O/ k, O0 }* {3 Q' @
  9.     if st[a_][b_][c_]:return
    \" u! x! t3 g# _
  10.     q.append([a_,b_,c_])
    ) B% L. C2 U7 Z1 `1 S4 I3 j
  11.     st[a_][b_][c_]=1
    ! {  c/ y$ p7 }/ G6 F
  12. def bfs():
    2 x3 J% J/ Y. f5 X
  13.     q.append([0,0,c])0 @  |7 h9 }7 n
  14.     st[0][0][c]=1
    ! W  c& F; d( {3 b1 I0 Q; c  |# |% z
  15.     while q:\" S' |+ ?& ?: B' H3 A! h) S3 x4 Y
  16.         a_,b_,c_ = q.popleft()  Y: k$ e5 ?0 f& x5 f& p7 a, A
  17.         ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )
    1 I# |7 p* O\" L- A3 w& D( \- j
  18.         ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )3 l6 q6 ^% u) c& Q. ?\" W5 d, K( _
  19.         ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ ): e. |' f+ X. j! O5 Q
  20.         ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )+ v; t7 n2 s9 v# U4 Z9 D) y/ S
  21.         ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )9 P$ U& T; U\" e- |5 w4 j
  22.         ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )7 f+ d/ x( ]3 H3 S' E
  23. bfs()
    9 p8 K8 }3 }) P0 @7 u
  24. for c_ in range(c+1):
      V% g2 J5 X! t- g\" x; H% m
  25.     for b_ in range(b+1):
    7 o- u1 H\" e& B1 y7 j5 l# \, N
  26.         if st[0][b_][c_]:$ p\" a7 q9 e+ @! ?
  27.             print(c_,end=' ')
    - Y2 K: y( K7 D\" s3 y
  28.             break
复制代码
$ |1 q9 H' Y, o3 Q. l
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-8-2 09:59 , Processed in 0.602450 second(s), 51 queries .

回顶部