python第五周:一元二次方程求根、百錢買百鴿、最大公約數和最小公倍數、計算三角形面積、回文素數、反素數


一元二次方程求根

一元二次方程ax2+bx+c=0,a、b、c的值由用戶在三行中輸入,根據用戶輸入的數值求解方程的實數解:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

如果a值 為0,根據b值判斷方程是否有解並輸出,如果a與b同時為0,則輸出Data error!‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

如果方程無實數解,輸出“該方程無實數解”;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

如果方程有兩個相同的實數解,輸出一個解;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

如果方程有兩個不同的實數解,在一行內按從大到小順序輸出方程的兩個解,用空格分隔。

import math
a=float(input())
b=float(input())
c=float(input())
data=pow(b,2)-4*a*c
if(a==0):
    if(b==0):
        print("Data error!")
    else:
        print(-(c/b))
else:
    if(data<0):
        print("該方程無實數解")
    elif(data==0):
        print((-b+math.sqrt(data))/(2*a))
    else:
        x1=(-b+math.sqrt(data))/(2*a)
        x2=(-b-math.sqrt(data))/(2*a)
        if(x1>x2):
            print("{} {}".format(x1,x2))
        else:
            print("{} {}".format(x2,x1))

百錢買百雞

我國古代數學家張丘建在《算經》一書中提出的數學問題:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,如果要求雞翁、雞母、雞雛都不為零,問雞翁、雞母、雞雛各幾何?

每行輸出一組結果,按雞翁數、雞母數、雞雛數的順序輸出,數字之間用空格分隔;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

如果有多組解時,按公雞數量由少到多輸出;

for i in range(1,100):
    for x in range(1,100):
        for y in range(1,100):
            if (((5*i+3*x+(1/3)*y)==100)and(i+x+y==100)):
                print(i,x,y)

求最大公約數和最小公倍數

a=int(input())
b=int(input())
ma=max(a,b)
mi=min(a,b)
while(b!=0):
    temp = a % b
    a = b
    b = temp
for i in range(1,mi+1):
    if ma*i%mi==0:
        x=ma*i
        break
print(a,x)

判斷三角形並計算面積

輸入三個數a,b,c, 判斷能否以它們為三個邊長構成三角形。若能,輸出YES和三角形面積(結果保留2位小數),否則輸出NO。

a=float(input())
b=float(input())
c=float(input())
if (a+b>c) and (a+c>b) and (b+c>a):
    s=(a+b+c)/2
    area=(s*(s-a)*(s-b)*(s-c))**0.5
    print("YES")
    print("{:.2f}".format(area))
else:
    print("NO")

回文素數

 回文素數是指一個數既是素數又是回文數。例如,131,既是素數又是回文數。
用戶輸入一個正整數n(1 <= n <= 100), 請你在一行內輸出從小到大排列的的前n個回文素數,數字之間用空格分隔。

n=int(input())
a=0
b=1
def prime(num):
    if num <= 1:
        return False
    i = 2
    while i * i <= num:
        if num % i == 0:
            return False
        i += 1
    return True
def huiwen(num):
    t=num
    total=0
    while t>0:
        total=total * 10+t % 10
        t=int(t/10)
    return num==total
while (a!=n):
    if(huiwen(b) and prime(b)):
        print(b ,end=' ')
        a=a+1
    b=b+1

反素數

反素數(逆向拼寫的素數)是指一個將其逆向拼寫后也是一個素數的非回文數。例如:13和31都是素數,且13和31都不是回文數,所以,13和31是反素數。
輸入一個正整數n(1 <= n <= 100), 請輸出從小到大排列的的前n個反素數,數字間以空格進行分隔。

n=int(input())
a=0
b=1
def prime(num):    #判斷數字是否是素數
    if num <= 1:
        return False
    i = 2
    while i * i <= num:
        if num % i == 0:
            return False
        i += 1
    return True  
def huiwen(num):    #判斷數字是否回文
    t=num
    total=0
    while t>0:
        total=total * 10+t % 10
        t=int(t/10)
    return num!=total 
def fanshu(num):    # 將數字反過來
    t=num
    total=0
    while t>0:
        total=total * 10+t % 10
        t=int(t/10)
    return (total)
while (a!=n):
    b2=fanshu(b)
    if(huiwen(b) and prime(b) and prime (b2)):
        print(b ,end=' ')
        a=a+1
    b=b+1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM