设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−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表示单词字符(数字字母下划线)
+号表示一个或多个的意思