CCF 訓練50題 NO 12 多項式加法

2021-08-10 15:48:57 字數 1948 閱讀 9332

乙個多項式可以表示為一組數對,數對中第乙個數始終為整數,且唯一,表示多項式的次數,另一數表示為對應的係數且不為0。輸入兩組數對,每組以0 0作為結束,實現對兩個多項式的加法並按降冪輸出結果數對

每乙個數對可以視為乙個結構體,每個結構體由兩個變數決定,相加的時候由數對的第乙個元素決定,相同的時候相加,找不到匹配項的直接儲存下來。最後應用sort的排序,最後的排序標準也是使用對第乙個元素的比較。coe表示係數,exp表示次數。

關鍵演算法部分就是相加和排序,相加的核心語句就是

if (ivec1[j].coe==ivec2[i].coe)

每次用一號陣列和二號陣列進行比對,依次比較,有相同的就讓指標變數遞增,若遍歷搜尋完成之後指標變數仍然為0,則說明沒有符合的疊加項,因此也要複製到輸出陣列中。

最後排序的核心演算法採用algorithm的sort排序演算法,布林型指標變數是由結點第乙個變數決定。關鍵步驟是

sort(ivec1.begin(), ivec1.end(), compare);

compare的核心語句是

return a.coe>b.coe?1:0;

最後的輸出用vector的常規順序輸出即可

(一)標頭檔案部分是要新增

vector和algorithm

標頭檔案便於構建陣列類和排序。

#include 

#include

#include

using

namespace

std;

int num;

(二)結構體構建的是陣列類的每個結點擁有元素分別代表多項式係數和多項式指數。

struct node;
(三)三個函式分別負責輸入輸出,相加還有排序的比較係數。

void input(vector

&ivec);

void output(const

vector

& ivec);

void add(vector

& ivec1, const

vector

&ivec2);

bool compare(const node& a, const node& b);

(四)主函式進行運算。

int main()
(六)輸出陣列函式的定義

void output(const

vector

& ivec)

(七)陣列相加函式的定義,關鍵在這裡的相加條件和返回最後結果的過程。採用指標變數,若指標變數從頭到尾的搜尋沒有變化,說明沒有需要相加的部分,也需要儲存下來。

void add(vector

& ivec1, const

vector

&ivec2)

}if (t==0)

}}

(八)返回sort函式中比較指標變數的函式

bool compare(const node& a, const node&  b)
這個題目思維偏簡潔,過程略複雜。需要耐心和嚴謹,運用stl的sort函式可以大大縮減**的長度。這要求我要熟悉stl的使用和簡易鍊錶還有陣列類的構建。我覺得這題還可以用鍊錶的第乙個鍊錶的倒序輸入,第二個鍊錶的插入輸入做,但是不如vector簡單方便。

CCF 訓練50題 NO 22 A除以B

本題要求計算a b,其中a是不超過1000位的正整數,b是1位正整數。你需要輸出商數q和餘數r,使得a b q r成立。這個問題關鍵點在於不超過1000位的整數和乙個一位數,這個不超過一千位的整數應當是以字串的形式錄入,然後模擬小學學的豎式除法。模擬豎式計算做到右依次,直到最後一位那裡即可得出結果。...

CCF模擬練習多項式加法C 滿分

問題描述 乙個多項式可以表示為一組數對,數對中第乙個數始終為整數,且唯一,表示多項式的次數,另一數表示為對應的係數且不為0。輸入兩組數對,每組以0 0作為結束,實現對兩個多項式的加法並按降冪輸出結果數對 輸入形式 每行輸入乙個數對,以空格為分隔符,以0 0結束 輸出形式 每行輸出乙個數對,以空格為分...

CCF 訓練50題 NO 23 錘子剪刀布

大家應該都會玩 錘子剪刀布 的遊戲。現給出兩人的交鋒記錄,請統計雙方的勝 平 負次數,並且給出雙方分別出什麼手勢的勝算最大。輸入第1行給出正整數n 105 即雙方交鋒的次數。隨後n行,每行給出一次交鋒的資訊,即甲 乙雙方同時給出的的手勢。c代表 錘子 j代表 剪刀 b代表 布 第1個字母代表甲方,第...