320
社区成员




小A有n枚硬币,现在要买一样不超过m元的商品,他不想被找零,同时又不想带太多的硬币,且硬币可以重复,现在已知这n枚硬币的价值,请问最少需要多少硬币就能组合成所有可能的价格?
这个题目,曾经用例有一个错误,经过反馈,现在终于修正了。一时半会,也想不出优雅的写法,先这样吧。
n,m = map(int,input().split())
arr = sorted(map(int,input().split()))
z,p,c = [],0,0
while sum(z) < m:
p += 1
if sum(z) > p:continue
a = [v for v in arr if v <= p]
if len(a) == 0:break
if sum(z) < p:z.append(a[-1])
print('No answer!!!' if len(z) == 0 else len(z))
用 js 做,发现用例有点问题,第三个用例输入是 13 200,两个数字间,有两个空格,所以用 split(' ')会报错,只好用正则切了
v1 = readline().split(/\s+/gi).map(x => parseInt(x))
v2 = readline().split(' ').map(x => parseInt(x)).sort((x,y) => x > y ? -1 : 1)
s = 0,c = 0,z = []
while (s < v1[1]){
c ++
if (s > c)continue
v = v2.filter(x => x <= c)
if (v.length == 0)break
if (s < c){s += v[0];z.push(v[0])}
}
print(z.length == 0 ? 'No answer!!!' : z.length)