PAT甲级1002 A+B for Polynomials (25 分)

题目:
1002 A+B for 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
​​
​​ … 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 sum 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 to 1 decimal place.

Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 2 1.5 1 2.9 0 3.2

PAT甲级1002 A+B for Polynomials (25 分)
思路:设定一个float数组,下标为指数(由于指数只能为int型),数组的值为系数,数组初始化为0,下标位置值不为0则代表存在包含该指数的项。

C:

#include<stdio.h>

int main(){
    int k=2;//两个多项式
    float exponents[1001];
    //将数组初始化为0
    for(int i=0;i<=1000;i++){
        exponents[i]=0.0f;
    }
    int exponents_temp=0;//指数
    float coefficients_temp=0.0f;//系数
    int flag=0;//记录有多少个式子
    int number=0;//多项式项数
    while(k--){
        scanf("%d",&number);
        while(number--){
            scanf("%d %f",&exponents_temp,&coefficients_temp);
            exponents[exponents_temp] += coefficients_temp;
        }
    }
    for(int i=0;i<=1000;i++){
        if(exponents[i]!=0.0){
            flag++;
        }
    }
    if(flag == 0){
        printf("%d",flag);
    }
    else{
        printf("%d ",flag);
    }   

    for(int i=1000; i >= 0; i--){
        if(exponents[i]!=0.0){
            printf("%d ", i);
            printf("%0.1f", exponents[i]);
            flag--;
            if(flag != 0)
                printf(" ");
        }
    }
    return 0;
}