1.换硬币
本题我首先第一没看懂题目,要换的零钱单位也是分,我以为是块,但是因此导致我注意到当是块时,如果用浮点数表示精度会不够,必须要先*10这样计算,还有就是过程中的剩余钱数temp我之前用一个变量进入到两个循环中了,但是第二个循环过后,temp值不能再进行下去了,变为负值。
m=int(input())
r={5:1,2:1,1:1}
i=int(m/5)
count=0
while i >0:
temp1=m-i*5
r[5]=i
j=int(temp1/2)
while j>0:
temp2=temp1-j*2
r[2]=j
k=int(temp2/1)
if(k>0):
r[1]=k
count=count+1
print("fen5:{0:d}, fen2:{1:d}, fen1:{2:d}, total:{3:d}".format(r[5],r[2],r[1],r[5]+r[2]+r[1]))
j=j-1
i=i-1
print('count =',count)
2.水仙花数
我记得之前写C的时候也遇到这个题目,但是python有个更简单的方法,因为取各个位数的话,C可能要用到%/的循环,而python可以转为str后转为list,这样就获取了每一位的字符,之后转为int即可
n=int(input())
for i in range(10**(n-1),(10**n)-1):
temp=[int(j)**n for j in list(str(i))]
if sum(temp)==i:
print(i)
3.猴子选大王
我一共犯了两个错误首先range生成的是从0开始的,因此print的时候要+1,另外当pop后,i虽然应该+3,但是pop了一个本来就应该往前挪一个,因此i-1。
n=int(input())
new=list(range(0,n))
i=2
while len(new)>1:
if i >=len(new):
i=i%len(new)
new.pop(i)
i=i+3-1
print(new[0]+1)
4.图的字典表示
我觉得我的bug在于如果有重复a-b或者b-a的没法判断,但是现在题目不需要= =
n=int(input())
d={}
line=0
length=0
for i in range(0,n):
d.update(eval(input()))
for key, value in d.items():
line=line+len(value)
for j,k in value.items():
length=length+k
print(n,line,length)