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

 

posted @ 2020-04-11 00:28  Jessie-  阅读(2236)  评论(0编辑  收藏  举报