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

這道題其實考察的是對字符串的處理。
顯然我們要將方程化爲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:
        return 1
    if 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:
                a.append(getNumber(string, 'x^2'))
            elif 'x' in string:
                b.append(getNumber(string, 'x'))
            else:
                c.append(int(string))
        for string in right:
            if 'x^2' in string:
                a.append(-getNumber(string, 'x^2'))
            elif 'x' in string:
                b.append(-getNumber(string, 'x'))
            else:
                c.append(-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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章