关于算法-数据结构:PAT甲级1009-Product-of-Polynomials

10次阅读

共计 802 个字符,预计需要花费 3 分钟才能阅读完成。

题目粗心:

给定 2 个多项式,求他们的乘积

算法思路:

间接模仿 2 个多项式乘积的过程即可,应用数组 A 和 B 别离寄存 2 个多项式,其中下标为指数,其值为系数,而后应用 result 保留两者相乘的后果,对于 A 的每一项都与 B 的每一项相乘,而后只有该项不为 0,就将后果累加到 result 对应的指数地位,最初统计 result 不为 0 的项个数并且输入后果即可。

留神点:

1、留神得初始化数组
2、留神空格的输入
3、result 的数组大小至多为 2001,因为有可能有指数为 2000 的项。

提交后果:

AC 代码:
#include<cstdio>

using namespace std;

int main(){
    int K;
    int N;// 指数
    double AN;// 系数 
    double A[1001] = {};
    double B[1001] = {};
    double result[2001] = {};
    // 先输出多项式 A 
    scanf("%d",&K);
    for(int i=0;i<K;++i){scanf("%d %lf",&N,&AN);
        A[N] = AN;
    }
    // 再输出多项式 B 
    scanf("%d",&K);
    for(int i=0;i<K;++i){scanf("%d %lf",&N,&AN);
        B[N] = AN;
    }
    // 计算 A 乘以 B
    for(int i=0;i<1001;++i){for(int j=0;j<1001;++j){double multi = A[i]*B[j];
            if(multi!=0){result[i+j] += multi;
            }
        }
    } 
    // 统计 result 不为 0 的项数 
    int num = 0;
    for(int i=0;i<2001;++i){if(result[i]!=0){++num;}
    }
    // 输入后果
    printf("%d",num);
    for(int i=2000;i>=0;--i){if(result[i]!=0){printf("%d %.1lf",i,result[i]);
        }
    } 
    return 0;
}

正文完
 0