在线时间 481 小时 最后登录 2026-8-25 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7859 点 威望 0 点 阅读权限 255 积分 2946 相册 0 日志 0 记录 0 帖子 1177 主题 1192 精华 0 分享 0 好友 1
该用户从未签到
题目描述】: U; k7 b2 U6 w
+ {( i+ \; j4 |" f: u 农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。2 Q7 p) h& C/ q7 D3 W3 L
. H2 W1 d) ? f( ] k7 \ 【输入格式】
3 M. O) E8 N z5 a f( _" I# ~$ e3 M
3 V) r0 ~9 g6 E% d+ T9 Z9 m 共一行,包含三个整数 A,B,C。! A$ e0 |% D* j' ^% `
) N( s3 m" ]) V) C% |
【输出格式】
5 m: k V7 N8 `5 }
* L e8 T! c) D 共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。# R/ F* k. b$ s e% n4 M. U+ v4 R
3 ~; G5 P9 ]& A. n; ?8 m" ~0 a 【数据范围】
# Y% N& _1 u9 Y0 o) e$ ]
; Y" L; `4 u6 @; | 1≤A,B,C≤20
. a. C3 }0 m' u / b1 c! [4 Z1 k& f- x( Y+ [
【输入样例】
* L$ d% I* i v/ Y0 P 2 A& R" h Z x3 L$ k6 n7 Y
8 9 10. b+ k- B( F g! ~! ?. ^0 x
【输出样例】. d, R' P+ _/ ~7 g" i9 ^
8 r3 r/ s0 O3 o! ?* c
1 2 8 9 105 C+ y9 m( O8 o8 A1 E: k7 u+ I
【解题思路】0 S9 V( @4 j0 e- \. X; W
! N; G0 x# x0 J# o2 i
BFS简答模拟一下倒牛奶的过程。from collections import *\" w a6 z9 `% r2 ?% Z9 L
a,b,c = map(int,input().split())\" s7 g- D/ r9 _4 E+ j; m
n = 22$ F# m1 i: b: y0 S* h- y
st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]
/ I( [7 R1 E( ], f( i * g5 Z- ?+ d4 ^\" F9 b
q = deque()! [. O3 K0 s\" {3 i& C! Y$ z
def ins(a_,b_,c_):
. @( r& m8 C1 K0 C1 R( Z global q
$ L8 n4 p5 A- _7 v% a/ d- {$ J3 ]1 q if st[a_][b_][c_]:return/ j, ?2 ], F+ B. k0 I/ W
q.append([a_,b_,c_])# J; }; e+ o3 @. W
st[a_][b_][c_]=1
\" J# H' J+ M) ~ def bfs():6 |9 V! s V- v
q.append([0,0,c])
( ^4 C5 c( t/ {2 A st[0][0][c]=14 q, a) I, n5 W: U$ r' }& P, I: q
while q:
4 {; p4 Y4 Z& [& Q9 p; T a_,b_,c_ = q.popleft()( `. I% U\" i2 G7 b2 D* Q
ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )
3 G/ K2 D0 K\" e( m8 I, W& m: H ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )
7 M- N$ Y0 l; _1 k0 O+ H ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )
- b8 ? S8 {\" e7 W! _/ l/ j4 f ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )\" L8 D5 n* X j, x
ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )* E& `: K5 V }0 T9 E- n\" g
ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )6 r, }, O0 N8 N* |
bfs()2 m3 m+ v! F9 Y a: L a* ~
for c_ in range(c+1):
1 s) t6 P. K( K: s for b_ in range(b+1):2 j- s, \6 \! o
if st[0][b_][c_]:, F5 S\" g8 s j9 E\" y: \
print(c_,end=' ')
( H6 b\" A. l6 d7 M\" K6 s( X- ?# H break 复制代码
3 D6 g1 W! d4 r* b
zan