1002. A+B for Polynomials (25)

1. 原题链接

1002. A+B for Polynomials (25)

2. 理解题目

通过指数(exp)和系数(coe)的形式输入两个多项式中系数不为0的项,且按照指数递减的顺序输入,求相加后的结果(也按照指数递减的顺序输出)。

3. 解题思路

[思路1]
定义结构体数组来保存多项式,结构体中exp记录指数,coe记录系数;声明结构体数组变量a[],b[],ans[]分别保存输入的两个多项式和结果多项式,此时a、b数组内的指数都是递减的;然后用p1,p2,p这三个"指针"指向三个数组的下标,比较p1和p2指向元素的指数:
①如果相同,则系数相加,指数任取其一,保存进p所指的ans[]元素内;然后p,p1,p2都"指向下一个元素";
②如果不同,将指数较大的元素保存到ans[]中,并将p和指数较大的对应的指针"指向下一个元素";
[思路2]
直接用double数组来存储多项式信息,下标(非负整数类型)存储exp,数组内容(double类型)存储coe;然后第二次输入多项式信息时,直接将系数加入以exp作为下标的数组内;最终输出系数不为0的项即可;

4. 注意点

①注意系数相加后可能为0;
②解法2时,注意初始化数组为0;

5. AC代码

//watch out the coefficient of ans[i] may be zero
//[解法1] 
#include<cstdio>
const int maxn=1010;

struct Node{
    int exp;
    double coe;
}a[maxn],b[maxn],ans[maxn];

int main(){
    int len1,len2;
    scanf("%d",&len1);
    for(int i=0;i<len1;i++) 
        scanf("%d%lf",&a[i].exp,&a[i].coe);
    scanf("%d",&len2);
    for(int i=0;i<len2;i++)
        scanf("%d%lf",&b[i].exp,&b[i].coe);

    int p1,p2;int p;
    for(p1=p2=0;p1<len1||p2<len2;){
        if(a[p1].exp>b[p2].exp){
            ans[p].exp=a[p1].exp;
            ans[p].coe=a[p1].coe;
            p++;p1++;
        }
        else if(a[p1].exp<b[p2].exp){
            ans[p].exp=b[p2].exp;
            ans[p].coe=b[p2].coe;
            p++;p2++;
        }
        else{
            ans[p].exp=a[p1].exp;
            ans[p].coe=a[p1].coe+b[p2].coe;
            p++;p1++;p2++;
        }
    }
    int cnt=0;
    for(int i=0;i<p;i++) if(ans[i].coe) cnt++;
    printf("%d",cnt);
    for(int i=0;i<p;i++){
        if(ans[i].coe) printf(" %d %.1f",ans[i].exp,ans[i].coe);
    }
} 

//其实可以直接用 a[expo]= coe 来存储,然后直接相加coe,再统计非零系数cnt个数并按要求输出; 
//[解法2]
#include<cstdio>
const int maxn=1010;
double ans[maxn]={0};
int main(){
    int k;int exp;double coe;
    scanf("%d",&k);
    for(int i=0;i<k;i++){
        scanf("%d%lf",&exp,&coe);
        ans[exp]=coe;
    } 
    scanf("%d",&k);
    for(int i=0;i<k;i++){
        scanf("%d%lf",&exp,&coe);
        ans[exp]+=coe;
    }
    int cnt=0;
    for(int i=0;i<maxn;i++){
        if(ans[i]) cnt++;
    }
    printf("%d",cnt);
    for(int i=maxn-1;i>=0;i--){
        if(ans[i]) printf(" %d %.1f",i,ans[i]);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值