牛客 計算機考研複試上機題 二次方程計算器

2021-10-03 11:05:54 字數 1999 閱讀 2208

這道題其實考察的是對字串的處理。

顯然我們要將方程化為ax2+bx+c=0的形式,因此可以找出式子中所有x2、x的係數以及c。但是題目的輸入是乙個完整的字串,如果暴力遍歷的話會很麻煩,於是就想到把式子中的x2, x, c分開來。這用python其實很方便(其他語言不清楚,c/c++可能暴力會更簡單)。

用python 40+行就能解決這道題。

def

getnumber

(string, str_to_remove)

:"""

這個函式用來刪除string的字尾如'x^2'/'x',然後將數字部分返回

刪除字串可以用strip()

也可以用replace()

這裡之所以還單獨寫乙個函式,是因為可能有這種情:'x^2'

這種情況刪除字尾後會變成空串'',到時int()會出錯

"""if string == str_to_remove:

return1if

len(string)

==len

(str_to_remove)+1

:if string[0]

=='-'

:return-1

return

int(string.rstrip(str_to_remove)

)return

int(string.rstrip(str_to_remove)

)while

true

:try

: line =

input()

.strip(

).split(

'=')

left = line[0]

.replace(

'+',

' ')

.replace(

'-',

' -'

).split(

) right = line[1]

.replace(

'+',

' ')

.replace(

'-',

' -'

).split(

) a, b, c =,,

for string in left:

if'x^2'

in string:

'x^2'))

elif

'x'in string:

'x')

)else

:int

(string)

)for string in right:

if'x^2'

in string:

-getnumber(string,

'x^2'))

elif

'x'in string:

-getnumber(string,

'x')

)else:-

int(string)

)

a, b, c =

sum(a)

,sum

(b),

sum(c)

if a ==0:

print

("%.2f %.2f"%(

-c/b,

-c/b)

)elif b**2-

4*a*c <0:

print

("no solution"

)else

: tmp =

(b**2-

4*a*c)

**0.5

ans =

sorted([

(-b+tmp)/(

2*a),(

-b-tmp)/(

2*a)])

print

("%.2f %.2f"

%(ans[0]

, ans[1]

))except

:break

牛客網計算機考研複試 KY30 進製轉換

點這裡題目描述 將乙個長度最多為30位數字的十進位製非負整數轉換為二進位制數輸出。思路 模擬十進位制轉為二進位制的過程,用string儲存該數,遍歷這個string,每次保留模2的數,然後除2就行。如十進位制123 十進位制 除二 模二 123 61 1 061 30 1 030 15 0 015 ...

牛客網計算機考研複試 KY8 整數拆分

點這裡題目描述 乙個整數總可以拆分為2的冪的和,例如 7 1 2 4 7 1 2 2 2 7 1 1 1 4 7 1 1 1 2 2 7 1 1 1 1 1 2 7 1 1 1 1 1 1 1 總共有六種不同的拆分方式。再比如 4可以拆分成 4 4,4 1 1 1 1,4 2 2,4 1 1 2。用...

牛客網計算機考研複試 KY3 約數的個數

點這裡題目描述 輸入n個整數,依次輸出每個數的約數的個數 思路1 對每乙個數計算其公約數,遍歷1到sqrt n 之間的數。1 include using namespace std int main cout cnt endl return 0 思路2 當n非常大的時候,第一種方法顯然會超時,這時我...