• 一元多项式的加/减法运算


    问题描述 :

    假设2个稀疏一元多项式分别由带头结点的有序单链表A和B存储(指数项递增有序)。现要求设计一个算法,实现稀疏一元多项式的加减法计算。要求使用A和B的原存储空间(运算后B不再存在,A链表中保存结果多项式)。输入中的单链表的长度不得在计算算法中利用,仅作为建表使用。

    注意:加/减法计算后,如某一项的结果系数为0,则该项要从多项式链表中删除。

    输入说明 :

    第一行:加/减法选择(0:加法  1:减法)

    第二行:一元多项式A的项数

    第三行:一元多项式A的各项的系数(系数之间以空格分隔)

    第四行:一元多项式A的各项的指数(指数之间以空格分隔)

    第五行:一元多项式B的项数

    第六行:一元多项式B的各项的系数(系数之间以空格分隔)

    第七行:一元多项式B的各项的指数(指数之间以空格分隔)

    如果A或B的项数为0,则认为输入的多项式只包含数字“0”,即系数为0,指数也为0。

    输出说明 :

    第一行:多项式A的第一项的系数、指数(以空格分隔)

    第一行:多项式A的第二项的系数、指数(以空格分隔)

    ...

    第n行:多项式A的第n项的系数、指数(以空格分隔) (假设多项式A的项数为n)

    (空行)

    第一行:多项式B的第一项的系数、指数(以空格分隔)

    第一行:多项式B的第二项的系数、指数(以空格分隔)

    ...

    第m行:多项式B的第m项的系数、指数(以空格分隔) (假设多项式B的项数为m)

    (空行)

    第一行:加/减法计算后,结果多项式A的第一项的系数、指数(以空格分隔)

    第一行:加/减法计算后,结果多项式A的第二项的系数、指数(以空格分隔)

    ...

    第p行:加/减法计算后,结果多项式A的第n项的系数、指数(以空格分隔) (假设结果多项式的项数为p)

    (多项式之间以空行分隔,如果多项式只包含“0”,则相应的多项式输出"0 0",不包含引号。)

    输入范例 :

    1
    6
    7 3 -22 9 5 -8
    0 1 7 8 17 100
    3
    8 22 -9
    1 7 8

    输出范例 :

    7 0
    3 1
    -22 7
    9 8
    5 17
    -8 100

    8 1
    22 7
    -9 8

    7 0
    -5 1
    -44 7
    18 8
    5 17
    -8 100

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <algorithm>
    #include <iostream>
    #include <vector>
    using namespace std;
    typedef struct node
    {
        int  factor;//系数
        int index;//指数
        struct node* next;
        node(int fa) :factor(fa),next(0){}
    }Node;
    void my_print(Node* head)
    {
        Node* p = head->next;
        if(!p)printf("%d %d
    ",0, 0);
        while (p)
        {
            printf("%d %d
    ", p->factor, p->index);
            p = p->next;
        }
    }
    //创建带头节点的链表
    Node* createList(int n)
    {
        int i,val;
        vector<Node*> node_vec;
        Node* head = new Node(0);
        node_vec.push_back(head);//头结点
        for (i = 0; i < n; i++)
        {
            scanf("%d", &val);
            node_vec.push_back(new Node(val));
        }
        for (i = 1; i <= n; i++)
        {
            node_vec[i - 1]->next = node_vec[i];
            scanf("%d", &val);
            node_vec[i]->index = val;
        }
        return head;
    }
    Node* my_fun(Node* la, Node* lb, int mode)
    {
        Node* pa=la->next, * pb=lb->next,* res=la,*res_tail=la;
        int temp;
        while (pa && pb)
        {
            if (pa->index == pb->index)
            {
                if (!mode)//+
                    temp = pa->factor + pb->factor;
                else//-
                    temp = pa->factor - pb->factor;
                if (temp)
                {
                    res_tail->next = pa;
                    pa->factor = temp;
                    res_tail = pa;
                }    
                pa = pa->next;
                pb = pb->next;
            }
            else if (pa->index < pb->index)
            {
                res_tail->next = pa;
                res_tail = pa;
                pa = pa->next;
            }
            else
            {
                res_tail->next = pb;
                res_tail = pb;
                if (mode)pb->factor = -pb->factor;
                pb = pb->next;
            }
        }
        res_tail->next = NULL;
        if (pa)
            res_tail->next = pa;
        while (pb)
        {
            res_tail->next = pb;
            res_tail = pb;
            if (mode)pb->factor = -pb->factor;
            pb = pb->next;
        }
        return res;
    }
    int main()
    {
        int mode;//0 加 1减
        scanf("%d", &mode);
        int n, i;
        scanf("%d", &n);
        Node* la = createList(n);
        scanf("%d", &n);
        Node* lb = createList(n);
        my_print(la); cout << endl;
        my_print(lb); cout << endl;
        Node* res = my_fun(la, lb, mode);
        my_print(res);
        return 0;
    }
  • 相关阅读:
    LRT最大似然比检验
    EPNP理论分析
    奇异值SVD分解
    矩阵求导
    static_cast和dynamic_cast用法
    Django 使用 Celery 实现异步任务
    python爬虫实战一:分析豆瓣中最新电影的影评
    scrapy模拟登陆知乎--抓取热点话题
    一个小时搭建一个全栈Web应用框架(上)
    一个小时搭建一个全栈 Web 应用框架(下)——美化与功能
  • 原文地址:https://www.cnblogs.com/lancelee98/p/13221665.html
Copyright © 2020-2023  润新知