小白第一次投稿,水平不足,欢迎各位大佬批评指正
目录
1.起因
我在做这道题的时候P5727 【深基5.例3】冰雹猜想 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
由于计算过程涉及除法运算,导致输出的结果带有小数点,测试不能通过
例:
输出样例:
1 2 4 8 16 5 10 20
我的输出结果:
1.0 2.0 4.0 8.0 16.0 5.0 10.0 20
故我开始尝试删除小数点及其后面的’0‘
2.尝试过程
如果输入一个小数点后结尾有多个0的数字,然后用其减0
会发现多余的0被删除了
print(732.220800-0)
>>732.2208
但是如果小数点后只有0
减0后小数点后的0仍有
print(732.000-0)
print(732.0-0)
<<732.0
<<732.0
故尝试设计函数分两步去除小数点后的0
3.最终代码
def delete_extra_zero(n):
n = n-0 #先去除多余的0
n = str(n) #转变为字符串类型
if n.endswith('.0') == True: #判断n是否以’.0‘结尾
n = n.replace('.0','') #是则删除’.0‘ 即用空白符取代
n = int(n) #转变回int类型
return n
测试:
print(delete_extra_zero(729.20008000))
>>729.20008
print(delete_extra_zero(729.0))
>>729
4.结语-冰雹猜想代码
都是很基础的代码,没什么干货。
上面那道题的Python解法
n = int(input())
a = [n]
def bingBao(n):
if n == 1:
return a
elif n%2 == 0:
n = n/2
a.append(n)
return bingBao(n)
else:
n = n*3+1
a.append(n)
return bingBao(n)
bingBao(n)
a = a[::-1]
for i in range(len(a)):
print(str(a[i]).replace('.0',''),end = ' ')
到了晚上才发现洛谷的提交记录在哪儿看,我忘了算数运算符的取整符号了,所以想的复杂了,下面贴一个大佬解法:
n = int(input())
a = []
a.append(n)
while n != 1 :
if n % 2 : #整数非0则为True 即如果n%2不为0,则:
n = n * 3 + 1
else : n = n // 2
a.append(n)
a.reverse()
for i in range(0, len(a)) :
print(a[i], end = ' ')