国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

PTA 習(xí)題3.6 一元多項(xiàng)式的乘法與加法運(yùn)算

這篇具有很好參考價(jià)值的文章主要介紹了PTA 習(xí)題3.6 一元多項(xiàng)式的乘法與加法運(yùn)算。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目

設(shè)計(jì)函數(shù)分別求兩個(gè)一元多項(xiàng)式的乘積與和。

輸入格式:
輸入分2行,每行分別先給出多項(xiàng)式非零項(xiàng)的個(gè)數(shù),再以指數(shù)遞降方式輸入一個(gè)多項(xiàng)式非零項(xiàng)系數(shù)和指數(shù)(絕對(duì)值均為不超過1000的整數(shù))。數(shù)字間以空格分隔。

輸出格式:
輸出分2行,分別以指數(shù)遞降方式輸出乘積多項(xiàng)式以及和多項(xiàng)式非零項(xiàng)的系數(shù)和指數(shù)。數(shù)字間以空格分隔,但結(jié)尾不能有多余空格。零多項(xiàng)式應(yīng)輸出0 0。

輸入樣例:

4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1

輸出樣例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0

題目不算難,但是我實(shí)力不夠,踩了不少坑,包括將得到的乘法多項(xiàng)式按照降序插入結(jié)果多項(xiàng)式時(shí),一直因?yàn)榭罩羔樚幚淼貌缓枚鴮?dǎo)致失??;合并同類項(xiàng)忘記判斷合并后的系數(shù)是否為0。
甚至一開始算加法多項(xiàng)式時(shí),我將list1和list2的節(jié)點(diǎn)直接插入到結(jié)果多項(xiàng)式中,破壞了鏈表的結(jié)構(gòu),導(dǎo)致求乘法多項(xiàng)式一直得不到想要的數(shù)據(jù)。
刷提前理清思路真的很重要,以后再也不會(huì)一上來就直接寫代碼了。

1、加法多項(xiàng)式

題目給出的輸入已經(jīng)按照降冪順序排列好,相加時(shí)不需要考慮順序的問題,同時(shí)加法也不需要考慮同類項(xiàng)合并,但加法需要考慮系數(shù)互為相反數(shù)的項(xiàng)相加為0的情況。

運(yùn)算思路:
分別令pq指向list1list2(即兩個(gè)多項(xiàng)式)的第一項(xiàng)數(shù)據(jù)
當(dāng)p的指數(shù)大于q的指數(shù),將節(jié)點(diǎn)p復(fù)制給新節(jié)點(diǎn)newNode,將newNode移動(dòng)到result的末尾,p往后移動(dòng),q不動(dòng)
當(dāng)p的指數(shù)小于q的指數(shù),將節(jié)點(diǎn)q復(fù)制給新節(jié)點(diǎn)newNode,將newNode移動(dòng)到result的末尾,q往后移動(dòng),p不動(dòng)
當(dāng)p的指數(shù)等于q的指數(shù),若pq的系數(shù)相加不為0,則復(fù)制到結(jié)果多項(xiàng)式,為0則舍棄。之后pq都要向后移動(dòng)
如果pq還有剩余的節(jié)點(diǎn),直接接到結(jié)果多項(xiàng)式的末尾
如果給出的輸入,所以項(xiàng)全部抵消了,或本身給出的輸入就是零多項(xiàng)式,此時(shí)結(jié)果多項(xiàng)式為空表,輸出0 0

PTA 習(xí)題3.6 一元多項(xiàng)式的乘法與加法運(yùn)算,PTA,鏈表,數(shù)據(jù)結(jié)構(gòu),算法,c語言

2、乘法多項(xiàng)式

乘法不用考慮相乘系數(shù)為0的情況,但需要考慮順序和同類項(xiàng)合并的問題。

用二重循環(huán)得到多項(xiàng)式相乘的所有結(jié)果
將每個(gè)結(jié)果節(jié)點(diǎn)newNode插入到結(jié)果多項(xiàng)式中合適的位置(按照指數(shù)降序排列)

  1. 先找到正確的插入位置,從結(jié)果多項(xiàng)式開頭按順序查找,找到第一個(gè)小于等于自己系數(shù)的項(xiàng)
  2. 如果小于,直接插入
  3. 如果等于,則要合并同類項(xiàng),要記得判斷合并后的系數(shù)是否為0,是則刪除這個(gè)項(xiàng)

PTA 習(xí)題3.6 一元多項(xiàng)式的乘法與加法運(yùn)算,PTA,鏈表,數(shù)據(jù)結(jié)構(gòu),算法,c語言
動(dòng)圖來源文章來源地址http://www.zghlxwxcb.cn/news/detail-728647.html

代碼

#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
    int coefficient; //系數(shù)
    int exponent;    //指數(shù)
    struct Node *next;
} Node, *LinkList;

void initList(LinkList *head)
{
    if ((*head = (LinkList)malloc(sizeof(Node))) == NULL)
        exit(-1);
    (*head)->next = NULL;
}
void creatList(LinkList head)
{
    LinkList p, tail = head;
    int count;
    scanf("%d", &count);
    while (count-- > 0)
    {
        p = (LinkList)malloc(sizeof(Node));
        scanf("%d%d", &p->coefficient, &p->exponent);
        tail->next = p;
        tail = p;
    }
    tail->next = NULL;
}
void printList(LinkList head)
{
    LinkList p = head->next;
    while (p)
    {
        if (p == head->next)
            printf("%d %d", p->coefficient, p->exponent);
        else
            printf(" %d %d", p->coefficient, p->exponent);
        p = p->next;
    }
}

void addition(LinkList list1, LinkList list2)
{
    LinkList result, p = list1->next, q = list2->next, tail, newNode;
    initList(&result);
    tail = result;
    while (p && q)
    {
        int coefficient1, coefficient2, exponent1, exponent2;
        newNode = (LinkList)malloc(sizeof(Node));

        // 當(dāng)p的指數(shù)大于q的指數(shù),將節(jié)點(diǎn)p復(fù)制給newNode,將newNode移動(dòng)到result的末尾,p往后移動(dòng),q不動(dòng)
        if (p->exponent > q->exponent)
        {
            newNode->coefficient = p->coefficient;
            newNode->exponent = p->exponent;
            newNode->next = NULL;
            tail->next = newNode;
            tail = newNode;
            p = p->next;
        }
        else if (p->exponent < q->exponent)
        {
            // 當(dāng)p的指數(shù)小于q的指數(shù),將節(jié)點(diǎn)q復(fù)制給newNode,將newNode移動(dòng)到result的末尾,q往后移動(dòng),p不動(dòng)
            newNode->coefficient = q->coefficient;
            newNode->exponent = q->exponent;
            newNode->next = NULL;
            tail->next = newNode;
            tail = newNode;
            q = q->next;
        }
        else
        {
            // 當(dāng)p和q的指數(shù)相等,直接將兩個(gè)的系數(shù)相加。如果相加后的系數(shù)為0,則將p,q直接移動(dòng)到下一位
            if (p->coefficient + q->coefficient == 0)
            {
                p = p->next;
                q = q->next;
                free(newNode);
            }
            else
            {
                newNode->coefficient = p->coefficient + q->coefficient;
                newNode->exponent = p->exponent;
                newNode->next = NULL;
                tail->next = newNode;
                tail = newNode;
                p = p->next;
                q = q->next;
            }
        }
    }
    // 如果p或q還有剩余節(jié)點(diǎn),直接接到result的末尾
    if (!p)
    {
        tail->next = q;
    }
    if (!q)
    {
        tail->next = p;
    }

    if (!result->next)
    {
        free(result);
        printf("0 0");
    }
    else
    {
        printList(result);
    }
}

void multiplication(LinkList list1, LinkList list2)
{
    LinkList result, p = list1->next, q , tail, newNode;
    initList(&result);
    tail = result;
    while (p)
    {
        q = list2->next;
        while (q)
        {
            // 創(chuàng)建新建的newNode
            newNode = (LinkList)malloc(sizeof(Node));
            newNode->coefficient = p->coefficient * q->coefficient;
            newNode->exponent = p->exponent + q->exponent;
            newNode->next = NULL;

            LinkList temp = result;
            // 找到合適的插入位置
            while (temp->next && newNode->exponent < temp->next->exponent)
            {
                temp = temp->next;
            }
            // 插入或者合并同類項(xiàng)
            if (temp->next == NULL || newNode->exponent > temp->next->exponent)
            {
                newNode->next = temp->next;
                temp->next = newNode;
            }
            else if (newNode->exponent == temp->next->exponent)
            {
                temp->next->coefficient += newNode->coefficient;
                // 如果合并同類項(xiàng)后系數(shù)為0,得刪除這個(gè)節(jié)點(diǎn)
                if(!temp->next->coefficient){
                    LinkList deleteNode=temp->next;
                    temp->next=deleteNode->next;
                    free(deleteNode);
                }
                free(newNode);
            }
            q = q->next;
        }
        p = p->next;
    }
    if (!result->next)
    {
        free(result);
        printf("0 0");
    }
    else
    {
        printList(result);
    }
}
int main()
{
    LinkList list1, list2;
    initList(&list1);
    initList(&list2);
    creatList(list1);
    creatList(list2);
    multiplication(list1, list2);
    printf("\n");  
    addition(list1, list2);
    return 0;
}

到了這里,關(guān)于PTA 習(xí)題3.6 一元多項(xiàng)式的乘法與加法運(yùn)算的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 一元多項(xiàng)式相加問題(兩種方法)

    一元多項(xiàng)式相加問題(兩種方法)

    一元多項(xiàng)式的相加問題,主要運(yùn)用了線性結(jié)構(gòu)的合并,在合并線性結(jié)構(gòu)的基礎(chǔ)上,增加判斷,所以我們可以將這個(gè)問題理解為一個(gè)復(fù)雜的線性表合并問題? 目錄 問題描述 一、順序表法 1.1 初始化并創(chuàng)建順序表 1.2 一元多項(xiàng)式相加算法 1.3 完整代碼 二、單鏈表法 1.1 初始化并創(chuàng)

    2024年02月06日
    瀏覽(24)
  • 用鏈表表示多項(xiàng)式,并實(shí)現(xiàn)多項(xiàng)式的加法運(yùn)算

    用鏈表表示多項(xiàng)式,并實(shí)現(xiàn)多項(xiàng)式的加法運(yùn)算

    輸入格式: 輸入在第一行給出第一個(gè)多項(xiàng)式POLYA的系數(shù)和指數(shù),并以0,0 結(jié)束第一個(gè)多項(xiàng)式的輸入;在第二行出第一個(gè)多項(xiàng)式POLYB的系數(shù)和指數(shù),并以0,0 結(jié)束第一個(gè)多項(xiàng)式的輸入。 輸出格式: 對(duì)每一組輸入,在一行中輸出POLYA+POLYB和多項(xiàng)式的系數(shù)和指數(shù)。 輸入樣例: 輸出樣例: 本

    2024年02月07日
    瀏覽(31)
  • 【數(shù)據(jù)結(jié)構(gòu)】一元多項(xiàng)式的表示及相加

    【數(shù)據(jù)結(jié)構(gòu)】一元多項(xiàng)式的表示及相加

    ??博客主頁: 程序員好冰 ??歡迎 【點(diǎn)贊?? 關(guān)注?? 收藏?? 留言??】 ??本文由 程序員好冰 原創(chuàng),CSDN 首發(fā)! ??入站時(shí)間: ??2022 年 07 月 13 日?? ?? 是非不入松風(fēng)耳,花落花開只讀書。 ??推薦書籍:??《Java編程思想》,??《Java 核心技術(shù)卷》 ??參考在線編程網(wǎng)

    2024年02月11日
    瀏覽(23)
  • 多項(xiàng)式加法(用 C 語言實(shí)現(xiàn))

    多項(xiàng)式加法(用 C 語言實(shí)現(xiàn))

    目錄 一、多項(xiàng)式的初始化 二、多項(xiàng)式的創(chuàng)建 三、多項(xiàng)式的加法 四、多項(xiàng)式的輸出 五、清除鏈表 六、主函數(shù) 用鏈表實(shí)現(xiàn)多項(xiàng)式時(shí),每個(gè)鏈表節(jié)點(diǎn)存儲(chǔ)多項(xiàng)式中的一個(gè)非零項(xiàng),包括 系數(shù)( coef ) 和 指數(shù)( exp )兩個(gè)數(shù)據(jù)域 以及 一個(gè)指針域( next ) 。對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)定義為

    2024年02月01日
    瀏覽(16)
  • Python做曲線擬合(一元多項(xiàng)式擬合及任意函數(shù)擬合)

    Python做曲線擬合(一元多項(xiàng)式擬合及任意函數(shù)擬合)

    目錄 1. 一元多項(xiàng)式擬合 使用方法?np.polyfit(x, y, deg) 2. 任意函數(shù)擬合 使用 curve_fit() 方法 實(shí)例: (1)初始化 x 和 y 數(shù)據(jù)集 (2)建立自定義函數(shù) (3)使用自定義的函數(shù)生成擬合函數(shù)繪圖? polyfig 使用的是最小二乘法,用于擬合一元多項(xiàng)式函數(shù)。 參數(shù)說明: x 就是x坐標(biāo),

    2024年02月02日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)(嚴(yán)蔚敏)【一元多項(xiàng)式的運(yùn)算】【C語言】

    數(shù)據(jù)結(jié)構(gòu)(嚴(yán)蔚敏)【一元多項(xiàng)式的運(yùn)算】【C語言】

    1、一元多項(xiàng)式的運(yùn)算:實(shí)現(xiàn)兩個(gè)多項(xiàng)式加、減乘運(yùn)算 設(shè)計(jì)內(nèi)容: 用順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)一元多項(xiàng)式的加法、減法和乘法。具體要求為:用五個(gè)函數(shù)分別實(shí)現(xiàn)一元多項(xiàng)式的創(chuàng)建、輸出、加法、減法和乘法; 設(shè)計(jì)思路: 將順序表數(shù)組下標(biāo)作為多項(xiàng)式的指數(shù)項(xiàng),數(shù)組內(nèi)的數(shù)據(jù)元素

    2023年04月15日
    瀏覽(39)
  • 一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)算器(C語言)含注釋

    一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)算器(C語言)含注釋

    問題描述 設(shè)計(jì)一個(gè)一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)算器 基本要求 一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)算器的基本功能是: (1)輸入并建立多項(xiàng)式; (2)輸出多項(xiàng)式,輸出形式為整數(shù)序列:n,c1,e1,c2,e2,……,cn,en,其中n是多項(xiàng)式的項(xiàng)數(shù),ci和ei分別是第i項(xiàng)的系數(shù)和指數(shù),序列按指數(shù)降序排列; (

    2024年02月08日
    瀏覽(18)
  • 多項(xiàng)式乘法逆

    前置知識(shí):NTT學(xué)習(xí)筆記(快速數(shù)論變換) 情景代入 洛谷P4238 【模板】多項(xiàng)式乘法逆 給定一個(gè)多項(xiàng)式 f ( x ) f(x) f ( x ) ,求 g ( x ) g(x) g ( x ) ,滿足 f ( x ) × g ( x ) ≡ 1 ( m o d x n ) f(x)times g(x)equiv 1pmod{x^n} f ( x ) × g ( x ) ≡ 1 ( mod x n ) 。系數(shù)對(duì) 998244353 998244353 998244353 取模。 1 ≤

    2024年02月02日
    瀏覽(20)
  • 第39關(guān):基于鏈表的兩個(gè)一元多項(xiàng)式的基本運(yùn)算

    第39關(guān):基于鏈表的兩個(gè)一元多項(xiàng)式的基本運(yùn)算

    任務(wù)描述 本關(guān)任務(wù):給定兩個(gè)一元多項(xiàng)式A(x)與B(x),利用鏈表表示A(x)與B(x),實(shí)現(xiàn)A(x)與B(x)的加法、減法、乘法和求導(dǎo)運(yùn)算。 編程要求 輸入 輸入多組數(shù)據(jù),總計(jì)n*( a+b+2)+1行。其中,第一行整數(shù)n代表總計(jì)有n組數(shù)據(jù),之后依次輸入n組數(shù)據(jù)。每組數(shù)據(jù)包括a+b+2行,其中第一行是兩

    2024年02月06日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】15 隊(duì)列應(yīng)用實(shí)例:多項(xiàng)式加法運(yùn)算

    我們準(zhǔn)備采用不帶頭節(jié)點(diǎn)的單向鏈表結(jié)構(gòu)表示一元多項(xiàng)式,并按照指數(shù)遞減的順序排列各項(xiàng)。 對(duì)列表存放的兩個(gè)多項(xiàng)式進(jìn)行加法運(yùn)算時(shí),可以使用兩個(gè)指針p1和p2。初始時(shí)的p1和p2分別指向這兩個(gè)多項(xiàng)式第1個(gè)節(jié)點(diǎn)(指數(shù)的最高項(xiàng))。通過循環(huán)不斷比較p1和p2所指的節(jié)點(diǎn),比較結(jié)

    2024年02月21日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包