PTA 甲 1009 Product of Polynomials

目录

  • 1009 Product of Polynomials
  • 题目原题
    • Input Specification:
    • Output Specification:
    • Sample Input:
    • Sample Output:
    • 注意点:
    • 一开始的代码
    • 改进后如下

1009 Product of Polynomials

题目原题

This time, you are supposed to find A×B where A and B are two polynomials.

Input Specification:

Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:

K N1 aN1 N2 aN2 ... *N**K* aNK

where K is the number of nonzero terms in the polynomial, *N**i* and aNi (i=1,2,?,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10, 0≤*N**K<?<N2<N*1≤1000.

Output Specification:

For each test case you should output the product of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate up to 1 decimal place.

Sample Input:

2 1 2.4 0 3.2
2 2 1.5 1 0.5

Sample Output:

3 3 3.6 2 6.0 1 1.6

生词一览:

polynomials 多项式

exponents 指数

coefficients 系数

题目大意,就是两个没有零项式的多项式相乘,输出他们的结果,

注意点:

① 这道题目不需要用两个数组

② 在计算他们的乘积的时候,要先把他们的乘积的数组算出来.

这个非常的重要,Sumc一定要在C[e]都算好了在统计个数
因为C[e]在计算中,可能会出现一正一负的,可以消去的同类项.
会多计算两次C[e] 一般这就是测试点0通不过的原因

③ 最好在输出的时候,是不可以输出非零项的.

一开始的代码

代码如下

#include<cstdio>
#include<iostream>
using namespace std;
int main(void) {
    int K1, K2, Maxa = 0, Maxb = 0, e, Sumc = 0;    //Sumc就是计算乘起来之后一共有几个非零的多项式
    double  c;
    double A[1005] = { 0 }, B[1005] = { 0 }, C[2005] = { 0 };
    scanf("%d", &K1);
    for (int i = 0; i < K1; i++) {
        scanf("%d%lf", &e, &c);
        if (e > Maxa) Maxa = e;         //这是计算乘积的时候的循环最大值
        A[e] = c;
    }
    scanf("%d", &K2);
    for (int i = 0; i < K2; i++) {
        scanf("%d%lf", &e, &c);
        if (e > Maxb) Maxb = e;         //这是计算乘积的时候的循环最大值
        B[e] = c;
    }
    for (int i = 0; i <= Maxa; i++) {
        if (A[i] != 0.0) {
            for (int j = 0; j <= Maxb; j++) {
                if (B[j] != 0.0) {
                    e = i + j;
                    c = A[i] * B[j];
                    if (C[e] == 0.0) {
                        C[e] = c;
                    }
                    else
                        C[e] = C[e] + c;
                }
            }
        }
    }
    //这个非常的重要,Sumc一定要在C[e]都算好了在统计个数
    //因为C[e]在计算中,可能会出现一正一负的,可以消去的同类项.
    //会多计算两次C[e]
    for (int i = 0; i <= Maxa + Maxb; i++) {
        if (C[i] != 0) {
            Sumc++;
        }
    }
    //第一个测试点有0 项,要删除,不能输出.
    printf("%d", Sumc);
    for (int i = Maxa + Maxb; i >= 0; i--) {
        if (C[i] != 0.0) {
            printf(" %d %.1lf", i, C[i]);
        }
    }
    return 0;
}

改进后如下

#include<cstdio>
#include<iostream>
using namespace std;
int main(void) {
    int K1, K2,e, Sumc = 0; //Sumc就是计算乘起来之后一共有几个非零的多项式
    double  c;
    double A[1005] = { 0 }, B[1005] = { 0 }, C[2005] = { 0 };
    scanf("%d", &K1);
    for (int i = 0; i < K1; i++) {
        scanf("%d%lf", &e, &c);
        A[e] = c;
    }
    scanf("%d", &K2);

    for (int i = 0; i < K2; i++) {
        scanf("%d%lf", &e, &c);
        int Te = e;
        double Tc = c;                  //每一次写好了,要重新赋值
        for (int j = 0; j <= 1002; j++) {

            e = j + e;
            c = A[j] * c;
            if (c != 0) {           //不计算非零项
                if (C[e] == 0.0) {
                    C[e] = c;
                }
                else
                    C[e] = C[e] + c;
            }
            e = Te; c = Tc;                 //重新赋值
        }

    }
    //这个非常的重要,Sumc一定要在C[e]都算好了在统计个数
    //因为C[e]在计算中,可能会出现一正一负的,可以消去的同类项.
    //会多计算两次C[e]
    for (int i = 0; i <= 2002; i++) {
        if (C[i] != 0) {
            Sumc++;
        }
    }
    //第一个测试点有0 项,要删除,不能输出.
    printf("%d", Sumc);
    for (int i = 2002; i >= 0; i--) {
        if (C[i] != 0.0) {
            printf(" %d %.1lf", i, C[i]);
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/a-small-Trainee/p/12342118.html

时间: 2024-10-06 13:50:26

PTA 甲 1009 Product of Polynomials的相关文章

[PTA] PAT(A) 1009 Product of Polynomials (25 分)

目录 Problem Description Input Output Sample Sample Input Sample Output Solution Analysis Code Result Problem portal:1009 Product of Polynomials Description Input Output Sample Sample Input Sample Output Solution Analysis Code #include <bits/stdc++.h>

PAT 1009. Product of Polynomials (25)

1009. Product of Polynomials (25) This time, you are supposed to find A*B where A and B are two polynomials. Input Specification: Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomi

1009. Product of Polynomials (25)——PAT (Advanced Level) Practise

题目信息: 1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue This time, you are supposed to find A*B where A and B are two polynomials. Input Specification: Each input file contains one test case. Each c

1009. Product of Polynomials

1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue This time, you are supposed to find A*B where A and B are two polynomials. Input Specification: Each input file contains one test case. Each case oc

1009 Product of Polynomials (25)(25 分)

1009 Product of Polynomials (25)(25 分) This time, you are supposed to find A*B where A and B are two polynomials. Input Specification: Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a pol

1009 Product of Polynomials (25分) 多项式乘法

1009 Product of Polynomials (25分) This time, you are supposed to find A×B where A and B are two polynomials. Input Specification: Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomi

PAT甲题题解-1009. Product of Polynomials (25)-多项式相乘

多项式相乘 注意相乘结果的多项式要开两倍的大小!!! #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <string.h> using namespace std; //两个多项式相乘 const int maxn=1000+5; int k; //原本定义个exp导致编译错误,没想到定义成exp1.exp2也会编译错误,

1009 Product of Polynomials (25)(25 point(s))

problem This time, you are supposed to find A*B where A and B are two polynomials. Input Specification: Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 a~N1~ N2 a~N2~ ..

1009 Product of Polynomials (25 分)

This time, you are supposed to find A×B where A and B are two polynomials. Input Specification: Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N?1?? a?N?1???? N?2?? a?N?2?