[code] PTA胡凡算法笔记 DAY007

本文详细介绍了如何求解一元多项式的求导问题(B1010),以及多项式乘法问题(A1009)。在B1010中,由于输入项指数降序,可以边输入边处理。在A1009中,利用指数不超过1000的特点,用一个数组存储乘积,避免了不必要的数组操作。理解题意并合理优化算法是关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目B1010 一元多项式求导

在这里插入图片描述

  • 题意
    系数是指k.x^n,其中的k,指数值n,正常求导。

  • 思路
    因为是指数降序输入,这样不存在项的合并,所以可以边输入边处理,然后这里我通过first去控制输出格式,同时也可以作为计数来用,去控制是否输出0 0

  • Code in C++

#include <iostream>

int main()
{
    int first = 1;
    long long e, n;
    while (std::cin >> e >> n) {
        if (n && e != 0) {
            e = n * e;
            n = n - 1;
            if (!first) {
                printf(" %d %d", e, n);
            } else {
                printf("%d %d", e, n);
            }
            first = 0;
        }
    }
    if (first) {
        printf("0 0");
    }
    printf("\n");
    return 0;
}


题目A1009 Product of Polynomials

在这里插入图片描述

  • 题意
    这里的多项式形式还是和上面一题一样。系数是指k.x^n,其中的k,指数值n,然后这里需要每项遍历做乘法。

  • 思路
    因为存在项数的合并问题,这里指数是天然的非负整数,然后题目给出指数大小不会大于1000,所以最大相乘的指数大小为2000,所以这里可以将数组下标作为系数,然后对应数组位置存储最后的值。这里需要注意的是可以合并一些操作,这里其实代码也没有必要开辟两个数组然后再进行计算操作。

  • Code in C++

#include <iostream>
#define maxn 2001

double a[11];
double e[maxn] = {0.0};
int ae[11];

int main()
{
    int m, n;
    std::cin >> m;
    for (int i = 0; i < m; ++i) {
        std::cin >> ae[i] >> a[i];
    }
    std::cin >> n;
    int be;
    double b;
    for (int j = 0; j < n; ++j) {
        std::cin >> be >> b;
        for (int i = 0; i < m; ++i) {
            e[ae[i] + be] += a[i] * b;
        }
    }

    int count = 0;
    for (int i = 0; i < maxn; ++i) {
        if (e[i] != 0.0) {
            ++count;
        }
    }

    printf("%d", count);
    for (int i = maxn - 1; i >= 0; --i) {
        if (e[i] != 0.0) {
            printf(" %d %.1f", i, e[i]);
        }
    }
    std::cout << std::endl;

    return 0;
}


小结

  • 读懂题意,B1010是计算最终结果都为0的时候才输出0 0
  • 注意合并一些没有必要的操作,比如A1009中没必要开两个数组,在另外一个数组输入的时候就可以开始计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值