当前位置: 代码迷 >> 综合 >> PAT乙级——1010(模拟操作)
  详细解决方案

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

热度:93   发布时间:2023-12-13 06:37:27.0

题目: 一元多项式求导 (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]--;}elseone_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");} } 

提交结果
在这里插入图片描述

但是当判断条件不是这个时,依照我的思路,将数据读入再统一进行计算时,没有办法跳出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");}} } 

提交结果
在这里插入图片描述