題目連結:
題目大意:
每列給定一個極限式,請求出極限值(保證是整數)。如果極限不存在或是極限為正、負無限大,則輸出「limit doesn't exist」。
極限式的格式為 n F(x),其中 n 可能為整數或是正、負無限大其中一者,而 F(X) 為一函數。
F(x) 可能會是分式之形式,以兩個函數以一個「/」隔開之「f1(x) / f2(x)」表示。對於每個函數 f(x) ,其每一項會寫為係數、一個空白、次方項,例如「3 x^2」。而當係數為 0 時,該項不會出現;次方為 0 時,該項沒有次方項(但是有係數)。且最高次方保證 ≦ 2。
範例輸入:
inf 1 x^2 -2 x 3 / 1 x 3
inf 3
3 2 x^2 -3 x -1
1 1 x^2 -1 / 1 x -1
0 1 / 1 x
範例輸出:
limit doesn't exist
3
8
2
limit doesn't exist
解題思維:
關於字串處理的部分這邊就不贅述(總之就是先讀 n ,然後剩下的字串找找看有沒有「/」出現,有就將字串分兩部分等等)。
如果給定的函數只由一個函數組成而不是分數型的,則就直接代 n 進去求結果。對於常數值的 n ,其結果就是直接計算即可。但是倘若遇到 inf(正無限大) 或是 -inf(負無限大),則基本上極限值都是 inf(或 -inf),唯一例外是常數函數(除了 0 次方項以外其他項的係數皆為 0,例 f(x) = 3),其值就是常數本身。
如果函數是分數型(f1(x) / f2(x))的,則會有以下幾種狀況會發生:
一:不定形,即 ∞ / ∞ 、 0 / 0 之形式。代表著 |f1(n)| = |f2(n)| = ∞ 或是 f1(n) = f2(n) = 0 (各自的極限)。
而此時無法確定極限的值(所以才是「不定形」),可以套用羅必達法則(L'Hôpital's Rule,見
維基):將 f1(x) 、 f2(x) 微分後再求極限,其結果與原本等價。如果微分後還是此類的不定形,則可以再繼續微分。
二:|f2(n)| = ∞ (在不符合情況一的狀況下,即 |f1(n)| ≠ ∞),則極限值為 0 。
三:|f1(n)| = ∞ 或 |f2(n)| = 0 (一樣是在一、二不符合的情況下),則極限為 +∞ 、 -∞ 或不存在,不管何者都是要輸出「limit doesn't exist」。
四:以上情況皆非,所以直接將 f1(n) 除以 f2(n) 即是極限值。
因為給定的函數為整數次方多項式,所以情況只有上述四種情況。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。