问题描述
小R住在一个名为 X 国的国家,这里的货币非常特殊,面值为 V0,V1,V2,...,VnV0,V1,V2,...,Vn,并且 nn 可以无限大。该国的交易规则也很特别:在一次交易中,双方只能对每种面值的货币使用不超过两次。
例如,小R想买一件价格为 198
的物品,货币的基数 V=10V=10 时,小R可以使用 2 张 100(102)100(102) 的纸币,卖家则找回 2 张 1(100)1(100) 的纸币。由于这个奇怪的规则,很多 X 国人都无法快速判断某个物品是否可以用这种方式交易成功,他们常常会请聪明的你来帮助。
你能帮他们判断一下,是否能按照规则用给定的货币面值 VV 来完成价格为 WW 的交易吗?
约束条件:
V
,W
为整数,数据范围 2 ≤V
, 1 ≤W
代码
def solution(V: int, W: int) -> str:
n, m = V, W
if n <= 5:
return "YES"
while m:
remainder = m % n
if remainder <= 2:
m //= n
elif remainder >= n - 2:
m = m // n + 1
else:
return "NO"
return "YES"
if __name__ == "__main__":
# Add your test cases here
print(solution(10, 9) == "YES")
print(solution(200, 40199) == "YES")
print(solution(108, 50) == "NO")