数据结构.多项式加法

#include<iostream>
using namespace std;
int a[100][2], b[100][2], sum[100][2];
int n, m;
int main()
{

    cin >> n;//输入第一个多项式的项数
    for (int i = 0; i < n; i++)
    {
        cin >> a[i][0] >> a[i][1];//分别输入系数和指数

    }
    cin >> m;//输入第二个多项式的项数
    for (int i = 0; i < m; i++)
    {
        cin >> b[i][0] >> b[i][1];//分别输入系数和指数

    }
    int x = 0, y = 0, s = 0;//定位a,b,sum数组的下标指向
    while (x < n && y < m)//当x,y在项数数量范围内,则比较两个多项式的大小
    {
        if (a[x][1] == b[y][1])//如果二者的指数相同
        {
            sum[s][0] = a[x][0] + b[y][0];//则系数相加
            if (sum[s][0] != 0)//如果系数不等于0
            {
               
                sum[s][1] = a[x][1];//则指数落系下来
                s++;//指针往后移动
            }
            x++, y++;//指针往后移动

        }
        else if (a[x][1] > b[y][1])//如果a多项式的指数比b的多项式的指数大
        {
            sum[s][0] = a[x][0];//则将a的系数和指数都落到sum中
            sum[s][1] = a[x][1];
            s++, x++;//a和sum的指针往后移动
        }
        else//如果b的多项式的指数比a的多项式的指数大
        {
            sum[s][0] = b[y][0];//则将b的系数和指数都落到sum中
            sum[s][1] = b[y][1];
            s++, y++;//b和sum的指针往后移动
        }
    }
    if (x == n && y < m)//如果a没有项数可以比较
    {
        for (int i = y; i < m; i++)//则将b剩余的项的系数和指数都落下来
        {
            sum[s][0] = b[i][0];
            sum[s][1] = b[i][1];
            s++;
        }
    }
    if (y == m && x < n)//如果b没有项数可以比较
    {
        for (int i = x; i < n; i++)//则将a剩余的项的系数和指数都落下来
        {
            sum[s][0] = a[i][0];
            sum[s][1] = a[i][1];
            s++;
        }
    }

    for (int i = 0; i < s; i++)
    {
        if (i == 0)
        {
            cout << sum[i][0] << " " << sum[i][1];
        }
        else
        {
            cout << " " << sum[i][0] << " " << sum[i][1];
        }
   }
    if (s == 0)
    {
        cout << 0 << " " << 0;
    }





    return 0;
}
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct node {
    int coef;//系数
    int exp;//指数
    node* next;//在c++中支持node*这种写法
}list;
node* newNode(int c, int e)//创建一个新结点
{
    node* temp = (node*)malloc(sizeof(node));
    temp->coef = c;//系数
    temp->exp = e;//指数
    temp->next = NULL;
    return temp;
}
list* createPoly(int n)//创建长度为n的链表
{
    list* L = NULL;//创建一个指针表示链表
    if (n == 0)//如果链表的长度为0,则直接返回
    {
        return L;
    }
    else
    {
        L = (list*)malloc(sizeof(node));//如果链表的长度不是0,则分配空间
    }
    int ac = 0;//初始化系数
    int ae = 0;//初始化指数
    node* lastp = L;//创建尾指针
    node* temp = NULL;//创建一个指针用来接收新插入的结点
    for (int i = 0; i < n; i++)
    {
        cin >> ac >> ae;//输入系数,指数
        temp = newNode(ac,ae);//接收这个新的结点
        lastp->next = temp;//尾插入新的结点
        lastp = temp;//更新尾结点
    }
    return L;//返回这条链表
}
list* addPoly(list* A, list* B)//将两个多项式相加
{
    if (!A->next)return B;
    if (!B->next)return A;
    node* pa = A->next;//pa指向A的第一项
    node* pb = B->next;//pb指向B的第一项
    list* sum = (list*)malloc(sizeof(node));//创建一个计算总和的链表
    sum->next = NULL;//初始化
    node* lastp = sum;//尾结点
    node* temp = NULL;//创建一个临时结点
    while (pa && pb)//如果满足二者的长度在多项式内 
    {
        if (pa->exp == pb->exp)//并且这一项的指数相同
        {
            if (pa->coef + pb->coef != 0)//并且相加还不等于0
            {
                temp = newNode(pa->coef + pb->coef, pa->exp);//那么就得到这个系数相加后的结点
                lastp->next = temp;//尾插入总和链表
                lastp = temp;
            }
            pa = pa->next;//指针向后移动
            pb = pb->next;

        }
        else if (pa->exp > pb->exp)//如果pa的指数比pb的指数大
        {
            temp = newNode(pa->coef, pa->exp);//将pa落下来
            lastp->next = temp;//尾插
            lastp = temp;
            pa = pa->next;//移动
        }
        else//如果pa的指数比pb小,同理
        {
            temp = newNode(pb->coef, pb->exp);
            lastp->next = temp;
            lastp = temp;
            pb = pb->next;
        }
    }
    if (pa == NULL && pb != NULL)//如果pa指向空,将pb后面的全部落下来
    {
        lastp->next = pb;

    }
    if (pb == NULL && pa != NULL)//同理
    {
        lastp->next = pa;
    }
    return sum;
}
void printPoly(list*L)//打印链表
{
    if (!L->next)//如果链表为空,则直接打印0 0
    {
        cout << "0 0";

    }
    else//如果链表不为空
    {
        node* p = L->next;//p指向第一个结点
        int i = 0;
        while (p)
        {
            if (i == 0)
            {
                cout << p->coef << " " << p->exp;
                i++;
            }
            else
            {
                cout << " " << p->coef << " " << p->exp;
            }
            p = p->next;
        }
    }
}
int main()
{
    int n, m;
    cin >> n;
    list* La = createPoly(n);//创建A链表
    cin >> m;
    list* Lb = createPoly(m);//创建B链表
    list* result = addPoly(La, Lb);//计算
    printPoly(result);//打印
    return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/424445.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Java 探索者之路] 一个大厂都在用的分布式任务调度平台

分布式任务调度平台是一种能够在分布式计算环境中调度和管理任务的系统&#xff0c;在此环境下&#xff0c;各个任务可以在独立的节点上运行。它有助于提升资源利用率&#xff0c;增强系统扩展性以及提高系统对错误的容忍度。 文章目录 1. 分布式任务调度平台1. 基本概念1.1 任…

02.刚性事务

刚性事务 1.DTP模型 X/Open组织介绍 X/OPEN是一个组织&#xff08;现在的open group&#xff09;X/Open国际联盟有限公司是一个欧洲基金会&#xff0c;它的建立是为了向UNIX环境提供标准。它主要的目标是促进对UNIX语言、接口、网络和应用的开放式系统协议的制定。它还促进在…

【兔子机器人】根据自身机器人参数修改simulink模型

关节电机 机体初始高度 &#xff01;&#xff01;&#xff01;接下来尝试修改各腿的坐标朝向

【文献管理】zotero插件4——获取知网pdf、中文文献识别与目录生成

文章目录 zotero获取知网PDFzotero——中文文献识别&#xff08;茉莉花插件&#xff09;学位论文目录生成 zotero获取知网PDF zotero——中文文献识别&#xff08;茉莉花插件&#xff09; 为下载的学位论文添加目录中文文献识别&#xff1a;jasminum 下载pdflabs下载茉莉花插…

Day23-磁盘管理与软件包管理

Day23-磁盘管理与软件包管理 1. 什么是文件系统&#xff1f;2. 为什么磁盘分区后需要格式化&#xff1f;3. 常见文件系统类型4. 文件系统体系结构&#xff08;图&#xff09;5. 生产文件系统选型5.1 SAS/SATA磁盘对应文件系统的选择&#xff1a;5.2 常规的服务应用建议&#xf…

(C语言)回调函数

回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff0c;当这个指针被⽤来调⽤其所指向的函数 时&#xff0c;被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅…

基于Java SSM框架实现众筹平台网站系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现众筹平台网站系统演示 SSM框架 当今流行的“SSM组合框架”是Spring SpringMVC MyBatis的缩写&#xff0c;受到很多的追捧&#xff0c;“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架&#xff0c;通常更简单的数据源。Spring…

对缓冲区的初步认识——制作进度条小程序

对缓冲区的初步认识--进度条小程序 前言预备知识回车和换行的区别输出缓冲区/n 有清空输出缓冲区的作用stdout是什么&#xff1f;验证一切皆文件为什么是\n行刷新&#xff1f; 倒计时程序原理 代码实现为什么这里要强制刷新&#xff1f;没有会怎样&#xff1f;为什么是输出的是…

英福康INFICON XTC/3/2薄膜镀层控制仪软件和使用说明

英福康INFICON XTC/3/2薄膜镀层控制仪软件和使用说明

【嵌入式实践】【芝麻】【设计篇-3】从0到1给电动车添加指纹锁:项目整体规划

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹&#xff0c;电动车进入P档等待时计时&#xff0c;计时超过5min则自动锁车&#xff0c;计时过程中按刹车可中断P档状态&#xff0c;同时中断锁车计时。改项目我称之为“芝…

[Python] 获取当前函数名的三种方法

使用__name__获取当前函数名 函数内和函数外都可以用__name__特殊属性。 def get_fun_name_1():fun_name get_fun_name_1.__name__print(fun_name)get_fun_name_1.__name__输出&#xff1a;get_fun_name_1 使用sys模块获取当前运行的函数名 sys._getframe()可以用来获取当…

编码器原理图

操作 旋转编码器提供两种交互方式&#xff1a; 每次用户旋转旋钮时&#xff0c;都会在 DT 和 CLK 引脚上产生低电平信号&#xff1a; 顺时针旋转会先使CLK引脚变为低电平&#xff0c;然后DT引脚也变为低电平。 逆时针旋转会使 DT 引脚首先变为低电平&#xff0c;然后 CLK 引脚…

linux环境安装cuda toolkit

1 全新安装 如果环境中没安装过cuda版本&#xff0c; 这种情况下比较简单。 直接在https://developer.nvidia.com/cuda-toolkit-archive选择对应版本下载安装即可。 如下为安装cuda toolkit 11.8. 2 环境中已经存在其他版本 这种情况下比较复杂一些。 首先要确认最高支持的…

NLP - 共现矩阵、Glove、评估词向量、词义

Word2vec算法优化 J(θ): 损失函数 问题&#xff1a;进行每个梯度更新时&#xff0c;都必须遍历整个语料库&#xff0c;需要等待很长的时间&#xff0c;优化将非常缓慢。 解决&#xff1a;不用梯度下降法&#xff0c;用随机梯度下降法 &#xff08;SGD&#xff09;。 减少噪音&…

Javaweb之SpringBootWeb案例之自动配置的原理分析的详细解析

3.2.3 原理分析 3.2.3.1 源码跟踪 前面我们讲解了在项目当中引入第三方依赖之后&#xff0c;如何加载第三方依赖中定义好的bean对象以及配置类&#xff0c;从而完成自动配置操作。那下面我们通过源码跟踪的形式来剖析下SpringBoot底层到底是如何完成自动配置的。 源码跟踪技巧…

python-分享篇-控制摄像头

文章目录 准备代码效果 准备 安装cv2 pip install opencv-python &#xff08;如果只用主模块&#xff0c;使用这个命令安装&#xff09; pip install opencv-contrib-python &#xff08;如果需要用主模块和contrib模块&#xff0c;使用这个命令安装&#xff09; 我的代码l里…

C语言:预处理

C语言&#xff1a;预处理 预定义符号#define定义常量定义宏宏与函数对比 #操作符##操作符条件编译头文件包含库文件包含本地文件包含嵌套文件包含 预定义符号 C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 __FILE__ //…

ctf_show笔记篇(web入门---php特性)

目录 php特性 89&#xff1a;直接数组绕过preg_match当遇到数组时会直接报错输出0 90&#xff1a;这里利用了intval的特性 91&#xff1a;这里需要细节一点 92-93&#xff1a;这两题的方法很多可以发散思维 94&#xff1a;还是利用小数绕过例如4476.0 95&#xff1a;这里…

mysql根据指定顺序返回数据--order by field

在查询数据的时候&#xff0c;在in查询的时候&#xff0c;想返回的数据根据 in里的数据顺序返回&#xff0c;可以直接在orderby中通过 FIELD(字段名称逗号分隔的值的顺序) 进行指定&#xff1b;示例没有加 order by field添加 order by field效果

宝塔面板安装各种组件以及部署应用服务

在linux服务器安装宝塔面板 一、从宝塔官网下载exe安装包&#xff0c;安装命令从宝塔官网&#xff08;https://www.bt.cn/&#xff09;获取 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh二、安…
最新文章