设计函数求一元多项式的导数。(注:x?n??(n为整数)的一阶导数为nx?n−1??。)
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0
。
3 4 -5 2 6 1 -2 0
12 3 -10 1 6 0
思路:
1.读题后,会获得一个偶数个值的数组
2.假设系数为a,指数为b;需要输出a*b+" "+(b-1);
3.如果输入的就是零多项式(即 a 0),那么就直接输出“0 0”;
4.如果输入的是非零项多项式,系数a(可为0或其他数字)但最后的指数b为0,那么不输出任何值;
按思路写了一版:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in =new Scanner(System.in); List<Integer>mylist=new ArrayList<Integer>(); boolean isOver=false; int tempValue=0; int a,b,count=0; String result =""; while(!isOver) { a=in.nextInt(); b=in.nextInt(); tempValue=a*b; if(b==0) { mylist.add(a); mylist.add(b); isOver=true; } else { mylist.add(a); mylist.add(b); } } for(int i =0;i<mylist.size();i+=2) { a=mylist.get(i); b=mylist.get(i+1); /* * 1. 只有0 * 3. 最后有0 * */ if(count==0) { if(a*b==0) { result="0 0"; } else { result=result+a*b+" "+(b-1); count++; } } else { if(a*b==0) { if(a==0&&b!=0) { result=result+" "+0+" "+0; } else if(a!=0&&b==0) { result=result+""; } } else if(b>0) { result=result+" "+a*b+" "+(b-1); } } } System.out.println(result); } }
然而,发现有用例不通过,遂百度,发现如下问题:
1. 输入的测试用例 不一定以指数为0时结束,可能输入一行任意值就结束了;
2. 如果系数a 为0,但指数b不等于0,也要输出 a +" "+(b-1);
参考:https://blog.csdn.net/qq_34594236/article/details/51533962
改完后:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in =new Scanner(System.in);
String Str=in.nextLine();
String[]tempS=Str.split("\\s+");//见末尾,意思为把所有空格都剔除掉并切割元素,分成一个数组
int count=0;
/*
* 一定是偶数
* */
String result ="";
for(int i =0;i<tempS.length;i+=2)
{
int a =Integer.parseInt(tempS[i]);//系数
int b =Integer.parseInt(tempS[i+1]);//指数
if(count==0&&b==0)
{
result="0 0";
}
else if(count==0)
{
result=a*b+" "+(b-1);
count++;
}
else if(count!=0&&b!=0)
{
result=result+" "+a*b+" "+(b-1);
}
else if(count!=0&&b==0)
{
result=result+"";
}
}
System.out.print(result);
}
}
关于:
String[]tempS=Str.split("\\s+");
正则表达式,
\\d表示 0-9 的数字,
\\s表示 空格,回车,换行等空白符,
\\w表示单词字符(数字字母下划线)
+号表示一个或多个的意思
原文:https://www.cnblogs.com/xiaozhushifu/p/10883098.html