PAT (Basic Level) Practice 1010 一元多项式求导 Python解法

PAT (Basic Level) Practice 1010 一元多项式求导 Python解法,第1张

PAT (Basic Level) Practice 1010 一元多项式求导 Python解法

目录

一、题目二、输入输出三、样例四、题目分析五、Python代码

一、题目

设计函数求一元多项式的导数。(注:x^n(n为整数)的一阶导数为nx ^n−1 。)

二、输入输出

输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。

输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。

三、样例

输入样例:
3 4 -5 2 6 1 -2 0
结尾无空行

输出样例:
12 3 -10 1 6 0
结尾无空行

四、题目分析

这道题目原理很简单,但要写出最高效率的代码需要深入思考。
其次这里面有个大坑,是仅仅使用Python语言才会遇到的。
1.思路:只需要借助flag标记保证结尾无空行的同时还能过滤输出,无需中间数组存储,直接输出,空间占用少,时间效率高。(详见代码1)。
2.大坑提醒:Python 中的split()函数用法回顾:

描述
split() 通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。

语法
split() 方法语法:

str.split(str="", num=string.count(str))
参数
str – 分隔符,默认为所有的空字符,包括空格、换行(n)、制表符(t)等。
num – 分割次数。默认为 -1, 即分隔所有。
返回值
返回分割后的字符串列表。
wa原因:由于Python并不具有像C++那种可以借助循环来输入不确定个数的整数,因此只能一股脑读入然后依靠分隔符函数split()分隔并存储在列表中,问题在于split(’ ‘)和split()的区别是,前者只能对空格分割,后者对包括空格、换行(n)、制表符(t)等进行分割。
然而题目中坑人的一点在于:

说好的以空格分隔,实际上如果使用split(’ ‘)再提交会显示两个测试点非零返回,如图:

非零返回意思就是说程序运行过程出错而异常退出,说明存在逻辑错误导致程序中断。
其实把split(’ ')里的引号去掉就能AC了。猜测可能是系统的测试点中有换行符,当数据量庞大时,存储在系统数据库的测试数据以文件形式存储,测试时也是连带换行符一起读去了的,因此需要用split()而非split(’ ')。
这也给我们提了个醒,千万不要以为PTA是个OJ系统就一定得对做题的人负责,我们作为程序设计人员也要思考PTA测试的本质,包括数据量、数据格式、题目出发点等等角度,这样综合起来考虑才更能跳出桎梏,走得更远。

五、Python代码

1.代码1(改编自柳婼,简洁巧妙):

get = input()
get = [int(i) for i in get.split()]
flag = 0
for i in range(0, len(get), 2):
    a = get[i]
    b = get[i + 1]
    if (b!=0):
        if (flag == 1):
            print(' ', end='')
        print(str(a * b)+' ' + str(b -1), end='')
        flag = 1
if (flag == 0):
    print('0 0', end='')

2.代码2(典型Python解题思路):

s = input().strip('n').split()
print(s)
res = []
for i in range(0,len(s),2):
    if(int(s[i + 1]) == 0):
        continue
    m = int(s[i]) * int(s[i + 1])
    n = (int(s[i + 1])) - 1
    res.append(str(m))
    res.append(str(n))
if(len(res) == 0):
    print('0 0')
else:
    print(' '.join(res).strip())

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5701017.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存