一、题目二、输入输出三、样例四、题目分析五、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测试的本质,包括数据量、数据格式、题目出发点等等角度,这样综合起来考虑才更能跳出桎梏,走得更远。
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())
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)