「PAT甲级真题解析」Advanced Level 1002 A+B for Polynomials

题目要求计算两个多项式的和, 多项式求和是有固定步骤的, 所以这是一道根据定义/规则精准翻译为代码的模拟题。 多项和求和的规则为: 将两个多项式中指数相同的项的系数相加作为和多项式该指数项的系数, 这意味着, 如果我们用将所有项都罗列出来(没有的项表示为系数为0的形式), 则只要依次做N次加法就可以求得和多项式各个项的系数。

·
#算法#数据结构#c++#pat考试#需求分析

Table of Contents

PAT (Advanced Level) Practice 1002 A+B for Polynomials

如果对你有帮助,要点个赞让我知道喔~

问题分析

题目要求计算两个多项式的和, 多项式求和是有固定步骤的, 所以这是一道根据定义/规则精准翻译为代码的模拟题。 多项和求和的规则为: 将两个多项式中指数相同的项的系数相加作为和多项式该指数项的系数, 这意味着, 如果我们用将所有项都罗列出来(没有的项表示为系数为0的形式), 则只要依次做N次加法就可以求得和多项式各个项的系数。 即,

    a0 * x ^ 0 		 + a1 * x ^ 1 			+ a2 * x ^ 2 			+ a3 * x ^ 3 			+ a4 * x ^ 4
+   b0 * x ^ 0		 + b1 * x ^ 1 			+ b2 * x ^ 2 			+ b3 * x ^ 3			 + b4 * x ^ 4
= (a0+b0) * x ^ 0   + (a1+b1) * x ^ 1 	+ (a2+b2) * x ^ 2 	+ (a3+b3) * x ^ 3 	 + (a4+b4) * x ^ 4

完整描述步骤

  1. 根据指数的取值范围[0, 1000], 设置长度为1001的数组并初始化各个值为0, 数组索引表示指数的值
  2. 获取输入多项式A: 项数, 每项的指数和系数
    • 读取的指数作为索引, 数组对应索引位置的值加上系数的值
  3. 同样的操作获取多项式B
  4. 输出数组中值非零(即系数非零)的项

伪代码描述

  1. init result[1001] = {0};
  2. get input: item_amount of A
  3. for i in range(0, item_amount):
    • get input: exponent, coefficient
    • result[exponent] += coefficient
  4. get input: item_amount of B
  5. for i in range(0, item_amount):
    • get input: exponent, coefficient
    • result[exponent] += coefficient
  6. init non_zero_item_counter = 0;
  7. for exponent in range(0, 1001):
    • if result[exponent] != 0:
      • non_zero_item_counter++;
  8. print(non_zero_item_counter);
  9. for exponent in range(0, 1001):
    • if result[exponent] != 0:
      • print("{exponent} {result[exponent]}")

完整提交代码

/*
# 问题分析
题目要求计算两个多项式的和, 多项式求和是有固定步骤的, 所以这是一道根据定义/规则精准翻译为代码的模拟题。
多项和求和的规则为: 将两个多项式中指数相同的项的系数相加作为和多项式该指数项的系数, 
这意味着, 如果我们用将所有项都罗列出来(没有的项表示为系数为0的形式), 则只要依次做N次加法就可以求得和多项式各个项的系数。
即,
    a0 * x ^ 0 + a1 * x ^ 1 + a2 * x ^ 2 + a3 * x ^ 3 + a4 * x ^ 4
+   b0 * x ^ 0 + b1 * x ^ 1 + b2 * x ^ 2 + b3 * x ^ 3 + b4 * x ^ 4
= (a0+b0) * x ^ 0 + (a1+b1) * x ^ 1 + (a2+b2) * x ^ 2 + (a3+b3) * x ^ 3 + (a4+b4) * x ^ 4
 
# 完整描述步骤
1. 根据指数的取值范围[0, 1000], 设置长度为1001的数组并初始化各个值为0, 数组索引表示指数的值
2. 获取输入多项式A: 项数, 每项的指数和系数
    - 读取的指数作为索引, 数组对应索引位置的值加上系数的值
3. 同样的操作获取多项式B
4. 输出数组中值非零(即系数非零)的项
 
# 伪代码描述
1. init result[1001] = {0};
2. get input: item_amount of A
3. for i in range(0, item_amount):
    - get input:  exponent, coefficient
    - result[exponent] += coefficient
4. get input: item_amount of B
5. for i in range(0, item_amount):
    - get input:  exponent, coefficient
    - result[exponent] += coefficient
6. init non_zero_item_counter = 0;
7. for exponent in range(0, 1001):
    - if result[exponent] != 0:
        - non_zero_item_counter++;
8. print(non_zero_item_counter);
9. for exponent in range(0, 1001):
    - if result[exponent] != 0:
        - print("{exponent} {result[exponent]}")
*/
 
 
 
# include<iostream>
using namespace std;
 
int main(){
    double result[1001]={0};
    int a;
    cin >> a;
    for (int i = 0; i < a; i++){
        int e;
        double c;
        cin >> e >> c;
        result[e] += c;
    }
    cin >> a;
    for (int i = 0; i < a; i++){
        int e;
        double c;
        cin >> e >> c;
        result[e] += c;
    }
    int count = 0;
    for (int i = 0; i< 1001; i ++){
        if (result[i] != 0.0){
            count++;
        }
    }
    cout << count;
    for (int i = 1000; i>= 0; i --){
        if (result[i] != 0.0){
            printf(" %d %.1f", i, result[i]);
        }
    }
 
    return 0;
}
 
「PAT甲级真题解析」Advanced Level 1002 A+B for Polynomials | 生活糖果