赞
踩
先对问题进行分析,需要改变的数为两个数之差,如(67)变为(12)需要变化的数为55,
我们的目标是把55变为00所用的最少次数。55变为00有两种方法:1.先把55后面一个5变为10,用的次数为5,数据变为60再把6变为0,可以把6增长到10或减到0,显然增长到10用的次数少,所以该种方法所用的次数9。2.把后面一个5减少到0,用的次数为5,数据变为50,因为5为最后的一个数据,它变为10或0所用的次数都为5,该方法所用的次数为10次。结果显而易见,第一种方法为最佳方案。所当前数据(f[i])为5时,我们需要判断下一个数据(f[i-1])是否大于或等于5,当下一个数据(f[i-1])大于等于5成立时,我们需要将当前数据(f[i])增长到10(次数加5,f[i-1]+1)所用的次数最少,当前数据(f[i])大于5或小于5时,则可以直接增长到10(次数加10-f[i],f[i-1]+1)或直接减少到0(次数加f[i])。最后输出sum次数。
- n=int(input())
- s=int(input())
- s1=int(input())
- f1=max(s1-s,s-s1)#取需要改变的数绝对值,如12345,24659,需要改变的数为12314
- f1=str(f1)
- f=[]
- for i in range(len(f1)):#把该数转化为列表【1,2,3,1,4】
- f.append(int(f1[i]))
- sum=0
- for i in range(len(f1)-1,-1,-1):#分类讨论
- if f[i]==10:#当需要改变的数为10时,需要向前进1,当前数据清零
- f[i-1]+=1
- f[i]=0
- if f[i]==5:#当数为5时,次数加5,数值可以当10或0
- sum+=5
- if f[i-1]>=5:#当f[i-1]数值大于等于5时,f[i]增长到10时,可以向前进1(f[i-1]+1)
- f[i-1]+=1#向前进1,所用的次数就可以少一次,如把55变00,先把后面一个5调到10,前面一个5变为6,6再到10,用的次数为4,一共为9次。比10次少
- if f[i]>5:#大于5只能增到10
- sum+=10-f[i]
- f[i-1]+=1
- elif f[i]<5:#小于5只能减到0
- sum+=f[i]
- print(sum)#打印次数
)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。