1010 一元多项式求导
分数 25
全屏浏览题目
切换布局
作者 DS课程组
单位 浙江大学
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0
。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
这题目很坑,它坑在题目的意思很让人费解:
坑点一:看输入方式是一个系数,再一个指数,但他还有一个条件,那就是指数是递减的。这个为啥说是坑点,等下就知道了。
坑点二:输出导数多项式非零项的系数和指数:啥是导数多项式非零项,就是求导之后,多项式不是零,如果是零就不输出,就被这个坑了,如果是3x^3+2,输入是3 3 2 0结果就是 9,2,但是如果是2 0,结果就是0 0,有人问2 0 3 4 呢,结果是0 0 12 3 吗?,不是,因为题目说了,按照指示递减输入,0<3,所以输入错误,同时我们知道,多项式之中,有一式求导后为零,也不输出,例如:3 4 -5 2 6 1 -2 0 中,-2,0求导后为0,但总式子不是零项式,所以0,-1或0,0(0x^-1==0x^0)不输出,
下面就是代码了
先是java:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
String[] nx=s.split(" ");
int[] n=new int[nx.length/2];
int[] xk=new int[nx.length/2];
sc.close();
for(int i=0;i<n.length;i++) {
n[i]=Integer.valueOf(nx[i*2]);
xk[i]=Integer.valueOf(nx[i*2+1]);
}
for(int i=0;i<n.length;i++) {
if(xk[i]==0&&i==0) {//如果是零项式
System.out.print(0+" "+0);
break;
}else if(n[i]*xk[i]==0) {//如果导数是零项
//啥也不输出
continue;
}else {
int xishu=n[i]*xk[i];
int changshu=xk[i]-1;
if(i==0) {
System.out.print(xishu+" "+changshu);
}else {
System.out.print(" "+xishu+" "+changshu);//输出求导后的结果
}
}
}
}
}
这个代码放pat上有点问题请看:
我实在不知道为啥java写的会报非零返回,查了半天也没解决,等以后差出来再解决;
下面是python代码:
list1=list(input().split())
n=[]
xk=[]
i=0
while i<len(list1)/2:
n.append(int(list1[i*2]))
xk.append(int(list1[i*2+1]))
i+=1
i=0
while i<len(n):
if i==0 and n[0]==0:
strs=str(0)+" "+str(0)
print(strs,end="")
break
elif n[i]*xk[i]==0:
i+=1
continue
else:
xishuD=n[i]*xk[i]
zhishuD=xk[i]-1
if i==0:
strs=str(xishuD)+" "+str(zhishuD)
print(strs,end="")
else:
strs=" "+str(xishuD)+" "+str(zhishuD)
print(strs,end="")
i=i+1