考點:模擬、字串
這是一道水題,水題能卡人往往是有某些資料沒考慮到。
題意:輸入係數,輸出多項式。
解法:
需要把所有特殊情況考慮到,分別是:
-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 次項係數為...