PAT乙级——1010(模拟操作)

题目: 一元多项式求导 (25 分)

设计函数求一元多项式的导数。(注: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. 零多项式的判断,当没有进行求导是需要进行判断。

代码实现

//这个代码的判断边界是第二个数为零,有一个用例没有通过,既没有考虑没有常数项的情况
import java.util.Scanner;

public class Main {
    public static void main(String []args){

        int count=0;
        Scanner input = new Scanner(System.in);
        int one_letter[]=new int[100];
       for(int i=0;i<100;i++){
            one_letter[i]=input.nextInt();
            count++;
            if(one_letter[i]==0)
                break;
        }
        input.close();
       int k=0;
       for(int i=0;i<count;i=i+2){
            if(one_letter[k+1]!=0){
                one_letter[k]=one_letter[k]*one_letter[k+1];
                one_letter[k+1]--;
            }
            else
                one_letter[k]=0;
            k=k+2;
        }
        k=0;
       int flag=0;
       while (one_letter[k]!=0){
            if(k!=0)
                System.out.print(' ');
            System.out.print(one_letter[k]+" "+one_letter[k+1]);
            flag=1;
            k=k+2;
        }
        if(flag==0)
            System.out.print("0 0");
    }
}

提交结果
PAT乙级——1010(模拟操作)_第1张图片

但是当判断条件不是这个时,依照我的思路,将数据读入再统一进行计算时,没有办法跳出while(input.hasNext())这个循环,就没有办法进行计算。最后参考了网上的方法,在循环内部边读入边计算边输出。
  
  这个方法只能算是应付过去了这个题目,结果正确,但是在日常的操作中是着实是不可取的,无法判断边界是真的很可怕,一直死循环。
  详细可参考Java while(scanner.hasNext())无法跳出的问题

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int one_letter[]=new int[2];
        int isHaveOutput = 0;
        while (in.hasNext()) {
            one_letter[0] = in.nextInt();
            one_letter[1] = in.nextInt();

            if (one_letter[0] * one_letter[1] != 0) {
                //当出现零时做判断,是零方程式还是常数项的阶数零
                if (isHaveOutput!=0) {
                    System.out.print(" ");
                } else {
                    isHaveOutput = 1;
                }
                System.out.print(one_letter[0] * one_letter[1] + " " + (one_letter[1] - 1));
            }
        }
        in.close();
        if (isHaveOutput==0) {
            System.out.print("0 0");
        }
    }
}

提交结果
PAT乙级——1010(模拟操作)_第2张图片

你可能感兴趣的:(PAT乙级,JAVA—PAT乙级解析)