本文代码来源于柳神,作者略作修改。以下是原文章链接:1002. A+B for Polynomials (25)-PAT甲级真题
PAT甲级1002题,题干简述:给出两个多项式,将其合并成一个多项式。
数学题目形式:
给出以下两个关于x的多项式,请将其合并:
2.4X+3.2X^(0) ①
2X^(1.5)+0.5X ②
①+②,得 2X^(1.5)+2.9X+ 3.2X^(0)
#include <iostream>
using namespace std;
int main()
{
float a[1001] = {0};//定义一个含有1001个元素的float型数组,
//所有元素初始值为0;
int m, k;
float n;
scanf_s("%d",&k);//scanf_s为vsual studio独有,其他编译器没有。
//如果要通过pat检测系统,请将所有scanf_s换为scanf。
for (int i = 0; i < k; i++)
{
scanf_s("%d%f", &m, &n);//第一次录入Nk及其系数。
a[m] = a[m] + n;
}
int q;
scanf_s("%d", &q);
for (int i = 0; i < q; i++)
{
scanf_s("%d%f", &m, &n);//第二次录入Nk及其系数。
a[m] = a[m] + n;
}
int cnt=0;
for (int i = 0; i < 1001; i++)//统计合并多项式后非零项个数,
//方法:挨个遍历
{
if (a[i] != 0)
{
cnt++;//cnt即为多项式中非零项个数。
}
}
//输出合并后的多项式。
cout << cnt;
for (int i = 1000; i >=0; i--)
{
if (a[i] != 0)
{
printf(" %d %.1f", i, a[i]);//cout <<" "<<i << " "<< a[i];
//在输出上可以达到一样的效果,但无法
//通过pat检测,故照搬柳神的代码。
}
}
return 0;
}
最后float型结果输出时,用%.1f限制小数位为1,否则会出现3.50000这样的输出结果。