天梯團隊賽 L2 018 多項式A除以B

2021-10-09 18:37:02 字數 3366 閱讀 6427

這仍然是一道關於a/b的題,只不過a和b都換成了多項式。你需要計算兩個多項式相除的商q和餘r,其中r的階數必須小於b的階數。

輸入格式:

輸入分兩行,每行給出乙個非零多項式,先給出a,再給出b。每行的格式如下:

n e[1] c[1] … e[n] c[n]

其中n是該多項式非零項的個數,e[i]是第i個非零項的指數,c[i]是第i個非零項的係數。各項按照指數遞減的順序給出,保證所有指數是各不相同的非負整數,所有係數是非零整數,所有整數在整型範圍內。

輸出格式:

分兩行先後輸出商和餘,輸出格式與輸入格式相同,輸出的係數保留小數點後1位。同行數字間以1個空格分隔,行首尾不得有多餘空格。注意:零多項式是乙個特殊多項式,對應輸出為0 0 0.0。但非零多項式不能輸出零係數(包括捨入後為0.0)的項。在樣例中,餘多項式其實有常數項-1/27,但因其捨入後為0.0,故不輸出。

輸入樣例:

441

2-31

-10-

1323

1-20

1

輸出樣例:
3

20.3

10.20-

1.011-

3.1

題目分析

本題主要有3個需要考慮的點:

多項式的除法運算

資料結構的選擇

保留1位小數後,有效數值的處理

一、首先解決多項式除法問題

多項式的除法簡單的來說,就是每次運算湊出被除數的最高次方的項,然後就能一次次的將被除數的最高次方給降下來,直到最高次方小於除數的次方。

拿題目的樣例來說:

被除數:x4−

3x2−

x−1x^-3 x^-x-1

x4−3x2

−x−1

除數:3x2

−2x+

13x^-2x+1

3x2−2x

+1被除數最大次方的項是 x4x^

x4那就湊出來,將除數乘上乙個 13x

同理,再次湊出最大次方的項,只需要乘上乙個 29x

一樣的,最後我們乘上乙個 −

2627

-\frac

−2726​

就是最後的答案了

題目要求進行保留1位小數所以結果就是:

商:0.3x2

+0.2x−

1.00.3x^+0.2x-1.0

0.3x2+

0.2x

−1.0

餘數:−

3.1x

−0.0

-3.1x-0.0

−3.1x−

0.0

二、其次解決資料結構選擇的問題

本題資料結構的選擇有很多種,我採用的是兩個陣列 e 和 c 分別儲存指數係數但是其實你也可以使用 map 容器來儲存,key就是指數,value是係數;或者如果你不知道如何使用map,那你也可以使用結構體+陣列的方式,總的來說,資料結構有著很多的選擇,不同的資料結構處理起來也有不同的方式。

三、最後解決保留小數1位小數的問題
題目要求保留1位小數,並且是經過捨入後的結果,如果你使用的是c語言的printf("%.1lf")那麼你就不需要考慮捨入的問題,這種方式會自動四捨五入。

如果你不是使用這種方式捨入,那麼你可以對輸出的結果加上乙個0.05,然後保留1位小數,這樣也能起到四捨五入的效果。

ac**:
#include

#include

#include

using

namespace std;

int e[3]

[50000];

// 指數

double c[3]

[50000];

// 係數

int a[

50000];

// 輔助陣列

double b[

50000];

// 輔助陣列

void

run(

int id,

int n)}if

(alln ==0)

else

printf

("%d %.1lf\n"

, a[alln-1]

, b[alln-1]

);}}

intmain

(int argc,

char

*ar**)

cin>>n2;

for(

int i=

0;i)int id =0;

// 標記被除數最大次方

int sum =0;

// 記錄運算了幾次

while

(e[0

][id]

>= e[1]

[0])

i =0;

j =0;

while

(i < n1 && j < n2)

if(i >= n1)

break;if

(rt[0]

[j]== e[0]

[i])

else

if(rt[0]

[j]> e[0]

[i])

else

}while

(j < n2)

while

(i < n1)

int res =-1

;// 標記有效的最大次方項的下標(因為有係數為0的項)

L2 018 多項式A除以B (25 分)

l2 018 多項式a除以b 25 分 這仍然是一道關於a b的題,只不過a和b都換成了多項式。你需要計算兩個多項式相除的商q和餘r,其中r的階數必須小於b的階數。輸入分兩行,每行給出乙個非零多項式,先給出a,再給出b。每行的格式如下 n e 1 c 1 e n c n 其中n是該多項式非零項的個數...

L2 018 多項式A除以B 25 分

這仍然是一道關於a b的題,只不過a和b都換成了多項式。你需要計算兩個多項式相除的商q和餘r,其中r的階數必須小於b的階數。輸入分兩行,每行給出乙個非零多項式,先給出a,再給出b。每行的格式如下 n e 1 c 1 e n c n 其中n是該多項式非零項的個數,e i 是第i個非零項的指數,c i ...

L2 018 多項式A除以B (25 分)(細節)

l2 018 多項式a除以b 25 分 思路 測試點比較多,這種需要分步驟考慮,1 首先搞清楚什麼是多項式除法,就是b d c a,在a b中,d表示商,c表示餘數,所以從a的最高項開始比較,每次消掉a中的最高項,逐步降低多項式a的最高項數,每次降低都是利用a b x k c,每個 x k 和c都是...