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

119 篇文章 0 订阅
8 篇文章 0 订阅

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;
}

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明仔的阳光午后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值