模擬 P1067 多項式輸出

2021-10-01 14:27:20 字數 1817 閱讀 5309

考點:模擬、字串

這是一道水題,水題能卡人往往是有某些資料沒考慮到。

題意:輸入係數,輸出多項式。

解法:

需要把所有特殊情況考慮到,分別是:

-1x 輸出為 -x

+1x 輸出為 x

第一項的係數為+,不能輸出+號

係數為0不輸出

x^0僅輸出係數

x^1輸出為x

我的做法是先不考慮這些特殊情況,把係數和指數全部存到字串,再把特殊情況刪除或替換。這題我沒過是因為x^1這種情況我直接替換成x了,而沒有考慮到x^19這種情況,為了解決這個問題我給每一項的結尾加了乙個#字元,然後將x^1#替換為x#,這樣就可以了。最後把所有#刪掉即可。

**中用到了字串流stringstream,因為我需要把正整數的正號保留,所以要用到 std::showpos 這個東西。

#include

using

namespace std;

intmain()

ss >> s;

//cout << s << endl;

// x^0刪除

if(s.

find

("x^0"

)!= s.npos)

//cout << s << endl;

// x^1替換為x bug!! 比如 x^19 變成 x9

if(s.

find

("x^1#"

)!= s.npos)

//cout << s << endl;

// -1x +1x 替換為 -x +x

while

(s.find

("-1x"

)!= s.npos)

while

(s.find

("+1x"

)!= s.npos)

//cout << s << endl;

// 開頭的正號不需要

if(s[0]

=='+'

) s = s.

erase(0

,1);

//cout << s << endl;

// 結尾的符號不需要

if(s.

size()

!=0&&ispunct

(s[s.

size()

-1])

) s = s.

erase

(s.size()

-1);

//cout << s << endl << endl;

while

(s.find

("#"

)!= s.npos) s = s.

erase

(s.find

("#"),

1); cout << s << endl;

}return0;

}

這種水題雖然沒有難度,但是如果漏算了某些特殊情況,那也只能認倒霉了。

這題我的測試用例全部都是指數在10以內的,當然就試不出 x^19 這種bug了。

P1067 多項式輸出(模擬)

題目鏈結 p1067 多項式輸出 luogu 應用題庫 訓練比賽 記錄討論 21.2k 通過74.5k 提交題目提供者 ccf noi 評測方式 雲端評測 標籤 noip普及組2009 難度 普及 時空限制 1000ms 128mb 其中,a ix ia i x i稱為ii次項,a ia i 稱為i...

P1067 多項式輸出 模擬

題目描述 一元nnn次多項式可用如下的表示式表示 f x anxn an 1xn 1 a1x a0,an 0f x a nxn a x cdots a 1x a 0,a n ne 0 f x an xn an 1 xn 1 a1 x a0 an 0 其中,aixia ix iai xi稱為iii次項...

P1067 多項式輸出

題目描述 一元 n 次多項式可用如下的表示式表示 其中,aixi稱為 i 次項,ai 稱為 i 次項的係數。給出乙個一元多項式各項的次數和係數,請按照如下規定的格式要求輸出該多項式 多項式中自變數為 x,從左到右按照次數遞減順序給出多項式。多項式中只包含係數不為 0 的項。如果多項式 n 次項係數為...