【模拟】P1067 多项式输出
生活随笔
收集整理的這篇文章主要介紹了
【模拟】P1067 多项式输出
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
https://www.luogu.com.cn/problem/P1067
考點:模擬、字符串
這是一道水題,水題能卡人往往是有某些數據沒考慮到。
題意:輸入系數,輸出多項式。
解法:
需要把所有特殊情況考慮到,分別是:
-1x 輸出為 -x
+1x 輸出為 x
第一項的系數為+,不能輸出+號
系數為0不輸出
x^0僅輸出系數
x^1輸出為x
我的做法是先不考慮這些特殊情況,把系數和指數全部存到字符串,再把特殊情況刪除或替換。這題我沒過是因為 x^1 這種情況我直接替換成x了,而沒有考慮到 x^19 這種情況,為了解決這個問題我給每一項的結尾加了一個#字符,然后將x^1#替換為x#,這樣就可以了。最后把所有#刪掉即可。
代碼中用到了字符串流stringstream,因為我需要把正整數的正號保留,所以要用到 std::showpos 這個東西。
#include <bits/stdc++.h> using namespace std; int main() {int n;while (cin >> n) {string s;stringstream ss;for (int i = n; i >= 0; i--) {int x; cin >> x;if (x == 0) continue; // 系數是0的項不需要ss << showpos << x << noshowpos << "x^" << i << "#";}ss >> s;//cout << s << endl;// x^0刪除if (s.find("x^0") != s.npos) {s.replace(s.find("x^0"), 3, "");}//cout << s << endl;// x^1替換為x BUG!! 比如 x^19 變成 x9if (s.find("x^1#") != s.npos) {s.replace(s.find("x^1#"), 4, "x#");}//cout << s << endl;// -1x +1x 替換為 -x +xwhile (s.find("-1x") != s.npos) {s.replace(s.find("-1x"), 3, "-x");}while (s.find("+1x") != s.npos) {s.replace(s.find("+1x"), 3, "+x");}//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;}return 0; }這種水題雖然沒有難度,但是如果漏算了某些特殊情況,那也只能認倒霉了。
這題我的測試用例全部都是指數在10以內的,當然就試不出 x^19 這種BUG了。
總結
以上是生活随笔為你收集整理的【模拟】P1067 多项式输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/C++ 输出整数带正负号
- 下一篇: 【模拟】P1563 玩具谜题