1010 一元多项式求导 (JAVA)

设计函数求一元多项式的导数。(注:xn​​(n为整数)的一阶导数为nxn1​​。)

输入格式:

以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 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表示单词字符(数字字母下划线)
+号表示一个或多个的意思

猜你喜欢

转载自www.cnblogs.com/xiaozhushifu/p/10883098.html