30,228
社区成员




利用字符串的快遍历、易判断某子字符在字符串里(in)的这两个特性来实现找出要求的数并求和。
#特别数的和:
n = int(input())
sum = 0
for i in range(n+1):
t = str(i)
if "1" in t or "2" in t or "0" in t or "9" in t:
a=int(t)
sum+=a
print(sum)
有1、5、10、15、20共5种硬币,数字s由这5个硬币中的某个或多个组成,请判断在数字s的组成最少需要多少硬币。
利用动态规划实现状态的更新来达到题意。先建立一个无穷大的数组(注意是s+1个,方便数据处理,使得数组[0]用于更新,数组[i]就是除数组[0]外的第i个数),Min表示状态,再利用两个for循环Min[i]=min(Min[i],Min[i-vale[j]]+1)进行状态更新(状态转化),使得第一次for循环实现Min[i]=i,后面再对Min[j]进行更新。
def slove(s):
Min=[int(1e12)]*(s+1)
Min[0]=0
for j in range(type):
for i in range(vale[j],s+1):
Min[i]=min(Min[i],Min[i-vale[j]]+1)
print(Min[s])
type=5
vale=[1,5,10,25,50]
s=int(input())
slove(s)