python中input的用法霍格沃_(python 3)1037 在霍格沃茨找零钱 (20分)

1037 在霍格沃茨找零钱 (20分)

如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱 P 和他实付的钱 A,你的任务是写一个程序来计算他应该被找的零钱。

输入格式:

输入在 1 行中分别给出 P 和 A,格式为 Galleon.Sickle.Knut,其间用 1 个空格分隔。这里 Galleon 是 [0, 10​7​​] 区间内的整数,Sickle 是 [0, 17) 区间内的整数,Knut 是 [0, 29) 区间内的整数。

输出格式:

在一行中用与输入同样的格式输出哈利应该被找的零钱。如果他没带够钱,那么输出的应该是负数。

输入样例 1:

10.16.27 14.1.28

输出样例 1:

3.2.1

输入样例 2:

14.1.28 10.16.27

输出样例 2:

-3.2.1

题不是很难,主要注意钱不够的时候要输出要加负号即可。

这个题有两种思路:

一是可以一位一位的加减来算,这种方法适合有比较大的数字的情况。

二是可以将钱都转化为面值最小的纳特,这种方法的缺点是当加隆的数量过多的时候(加隆范围:[0, 10​^7​​] ),转换为纳特很可能超出整型的表示范围(带符号32位int类型整数为-2147483648~2147483647),不过既然没出错,则表示测试点中没有很大的数据,可以偷个懒(手动滑稽)。

python代码;

import re

#将钱全部转换为纳特

#Convert all the money into Knut

def To_Knut(a1,a2,a3):

return a1*17*29+a2*29+a3

#将纳特转换为正常的形式

#Convert Knut into normal form

def To_normal_form(n):

#钱不够,输出字符串也要加负号

#Not enough money,the output string needs to add a minus sign

if n<0:

symbol='-'

n=abs(n)

else:

symbol=''

galleon=n//(17*29)

sickle=(n-galleon*17*29)//29

knut=n%29

return symbol+'.'.join(list(map(str,[galleon,sickle,knut])))

a1,a2,a3,b1,b2,b3=map(int,re.split('[. ]',input()))

small_change=To_Knut(b1,b2,b3)-To_Knut(a1,a2,a3)

print(To_normal_form(small_change))

原文链接:https://blog.csdn.net/qq_40728667/article/details/107893802

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值