PAT甲级 -- 1009 Product of Polynomials (25 分)

    xiaoxiao2024-10-21  81

    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​​​​ ... N​K​​ a​N​K​​​​

    where K is the number of nonzero terms in the polynomial, N​i​​ and a​N​i​​​​ (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10, 0≤N​K​​<⋯<N​2​​<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

    25分:

    注意:

    1.注意指数最大会到2000, C数组应该开到2001

    #include <iostream> #include <cmath> using namespace std; int ka, kb; //A和B中的非零项个数 double A[1001] = {0.0}, B[1001] = {0.0}, C[2001] = {0.0}; int expon; double coe; //指数和系数 int mxa = -1, mxb = -1; int main() { scanf("%d", &ka); for(int i = 0; i < ka; i++) { scanf("%d %lf", &expon, &coe); A[expon] += coe; mxa = max(mxa, expon); } scanf("%d", &kb); for(int i = 0; i < kb; i++) { scanf("%d %lf", &expon, &coe); B[expon] += coe; mxb = max(mxb, expon); } for(int i = 0; i <= mxa; i++) { for(int j = 0; j <= mxb; j++) { if(A[i] != 0 && B[j] != 0) { C[i+j] += A[i] * B[j]; } } } int ct = 0; for(int i = 2000; i >= 0; i--) { if(C[i] != 0) ct++; } printf("%d", ct); for(int i = 2000; i >= 0; i--) { if(C[i] != 0) printf(" %d %.1f", i, C[i]); } return 0; }

    2.柳神计算时输入多项式B时直接进行计算!参考:

    #include <iostream> using namespace std; int main() { int n1, n2, a, cnt = 0; scanf("%d", &n1); double b, arr[1001] = {0.0}, ans[2001] = {0.0}; for(int i = 0; i < n1; i++) { scanf("%d %lf", &a, &b); arr[a] = b; } scanf("%d", &n2); for(int i = 0; i < n2; i++) { scanf("%d %lf", &a, &b); for(int j = 0; j < 1001; j++) ans[j + a] += arr[j] * b; } for(int i = 2000; i >= 0; i--) if(ans[i] != 0.0) cnt++; printf("%d", cnt); for(int i = 2000; i >= 0; i--) if(ans[i] != 0.0) printf(" %d %.1f", i, ans[i]); return 0; }

     

    最新回复(0)