题解 | #自动售货系统#
自动售货系统
https://www.nowcoder.com/practice/cd82dc8a4727404ca5d32fcb487c50bf?tpId=37&tags=&title=&difficulty=0&judgeStatus=0&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37
# 难倒是不难,就是有点麻烦,题目长,要按部就班地写
import sys
inits = []
commands = []
def withdraw(cash_remain, pocket, out={1:0, 2:0, 5:0, 10:0}):
coins = [10, 5, 2, 1]
i = 0
while True:
if i < 4:
coin = coins[i]
if cash_remain >= coin and pocket[coin] > 0:
cash_remain -= coin
out[coin] += 1
pocket[coin] -= 1
else:
i += 1
if sum(pocket.values()) == 0 or cash_remain == 0:
break
return cash_remain, pocket, out
for line in sys.stdin:
line = line.strip()
if line:
tmp = ''
cmds = ''
for i in range(len(line)):
if line[i] != ';':
tmp += line[i]
else:
cmds = line[i+1:-1]
break
# print(tmp)
# print(cmds)
tmp = tmp.split()
tmp[1:] = [tmp[1].split('-'), tmp[2].split('-')]
inits = tmp
cmds = cmds.split(';')
# print(cmds)
commands = cmds
# print(inits, commands)
goods = {'A'+str(i):int(inits[1][i-1]) for i in range(1, len(inits[1])+1)}
prices = {'A'+str(i+1):v for i, v in enumerate([2, 3, 4, 5, 8, 6])}
pocket = {1:int(inits[2][0]), 2:int(inits[2][1]), 5:int(inits[2][2]), 10:int(inits[2][3])}
cash_remain = 0
if inits[0] == 'r':
print('S001:Initialization is successful')
# print(goods, prices, pocket)
for cmd in commands:
if cmd[0] == 'p':
cash = int(cmd[2:])
if cash not in pocket:
print('E002:Denomination error')
else:
pocket_1_2 = pocket[1] * 1 + pocket[2] * 2
goods_num = sum(goods.values())
if cash > pocket_1_2:
print('E003:Change is not enough, pay fail')
elif goods_num == 0:
print('E005:All the goods sold out')
else:
cash_remain += cash
pocket[cash] += 1
print(f'S002:Pay success,balance={cash_remain}')
elif cmd[0] == 'b':
good = cmd[2:]
if good not in goods:
print('E006:Goods does not exist')
elif goods[good] == 0:
print('E007:The goods sold out')
elif cash_remain < prices[good]:
print('E008:Lack of balance')
else:
goods[good] -= 1
cash_remain -= prices[good]
print(f'S003:Buy success,balance={cash_remain}')
elif cmd[0] == 'c':
if cash_remain == 0:
print('E009:Work failure')
else:
# print('start withdraw', cash_remain, pocket)
iout = {1:0, 2:0, 5:0, 10:0}
remain_cash, remain_pocket, out = withdraw(cash_remain, pocket, iout)
cash_remain, pocket = remain_cash, remain_pocket
# print('end withdraw', cash_remain, pocket)
for i in out:
print(str(i) + ' yuan coin number=' + str(out[i]))
elif cmd[0] == 'q':
flag = cmd[2:]
if flag not in ['0', '1']:
print('E010:Parameter error')
elif flag == '0':
goods_out = [[good, prices[good], goods[good]] for good in goods]
goods_out.sort(key=lambda x: x[2], reverse=True)
for good in goods:
print(good + ' ' + str(prices[good]) + ' ' + str(goods[good]))
else:
for coin in pocket:
print(str(coin) + ' yuan coin number=' + str(pocket[coin]))
查看16道真题和解析