7-2 一元多项式的乘法与加法运算 (20 分)(思路加详解+map做法)map真香啊 各个测试点的用例子 来吧宝贝!
一:題目
設(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二:補(bǔ)充測(cè)試用例
測(cè)試點(diǎn)2:
2 1 2 1 0 2 1 2 -1 0測(cè)試用力3:
2 -1000 1000 1000 0 2 1000 1000 -1000 0測(cè)試用例4:
0 0 1 2 3三:思路
思路:用map<int,int>進(jìn)行 存儲(chǔ)數(shù)據(jù);在處理乘積的時(shí)候 一個(gè)系數(shù) 對(duì)應(yīng)一個(gè)指數(shù),
若指數(shù)相同 對(duì)系數(shù)進(jìn)行累加
處理多項(xiàng)式和的運(yùn)算同理
四:上碼
/**思路:用map<int,int>進(jìn)行 存儲(chǔ)數(shù)據(jù);在處理乘積的時(shí)候 一個(gè)系數(shù) 對(duì)應(yīng)一個(gè)指數(shù),若指數(shù)相同 對(duì)系數(shù)進(jìn)行累加 */ #include<bits/stdc++.h> using namespace std;int main(){int N,M;int arr1[1001],arr2[1001]; // map<int,int>m;std::map<int, int, std::greater<int> > m,m2; //map默認(rèn)的遞增 ,這樣改成遞減的 //在創(chuàng)造map時(shí),增加參數(shù) **std::greater<int>**,就變成增加map<int,int>::iterator t; cin >> N;for(int i = 0; i < 2 * N; i++){int nums;cin >> nums;arr1[i] = nums;}cin >> M;for(int i = 0; i < 2 * M; i++){int nums;cin >> nums;arr2[i] = nums; }// 4 3 4 -5 2 6 1 -2 0 // 3 5 20 -7 4 3 1//計(jì)算乘積 for(int i = 0; i < 2 * N - 1; i = i + 2){for(int j = 0; j < 2 * M - 1; j = j + 2){int temp1 = arr1[i + 1] + arr2[j + 1]; //指數(shù)相加 int temp2 = arr1[i] * arr2[j];//系數(shù)相乘 m[temp1] += temp2;//一個(gè)指數(shù) 對(duì)應(yīng)系數(shù)(如果有指數(shù)相同的則累加) }}int flag = 0; if(N == 0 || M == 0){cout << "0 0";}else{for(t = m.begin(); t != m.end(); t++){if(flag == 0 && t->second != 0)//這里的t->second != 0 說的是系數(shù)不為0,一旦為0,就什么也不輸出 cout << t->second << ' ' << t->first;else if(t->second != 0){cout << ' ' << t->second << ' ' << t->first; } flag = 1;} }cout << endl;//計(jì)算多項(xiàng)式的和for(int i = 0; i < 2 * N - 1; i = i + 2){m2[arr1[i+1]] = arr1[i]; } for(int i = 0; i < 2 * M - 1; i = i + 2){m2[arr2[i+1]] += arr2[i];//如果遇見指數(shù)相同的系數(shù)相加 }int flag1 = 0; int count = 0;if(M == 0 && N == 0){cout << "0 0";}else{for(t = m2.begin(); t != m2.end(); t++){if(flag1 == 0 && t->second != 0)cout << t->second << ' ' << t->first;else if(t->second != 0){cout << ' ' << t->second << ' ' << t->first; } flag1 = 1;if(t->second == 0){count++;}} }if(count == m2.size()){//測(cè)試點(diǎn)三cout << "0 0";}} //測(cè)試用例子 2(測(cè)試點(diǎn)2) //2 1 2 1 0 //2 1 2 -1 0//測(cè)試點(diǎn)3用例子 // 2 -1000 1000 1000 0 // 2 1000 1000 -1000 0//測(cè)試點(diǎn)4的例子 // 0 // 0 1 2 3五:知識(shí)速遞(如果對(duì)于map的用法不了解的兄弟們,可以學(xué)一下啊)
map的基本用法
最后加油Boy!!! 刷題源于熱愛 , 順便服務(wù)與以后的工作,學(xué)到老,刷到老!!!!!!!!!!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的7-2 一元多项式的乘法与加法运算 (20 分)(思路加详解+map做法)map真香啊 各个测试点的用例子 来吧宝贝!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7-3 树的同构 (25 分)(思路加详
- 下一篇: 7-1 多数组排序 (12 分)三种做法