Python——算法

文章目录

  • 算法
    • 1.世界末日
    • 2.马虎的算式
    • 3.振兴中华
    • 4.斐波那契数列
    • 5.武功秘籍
    • 6.切面条
    • 7.立方变自身
    • 8.圆的面积
    • 9.字母图形
    • 10.Huffuman树

算法

1.世界末日

曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。还有人称今后的某个世纪末的12月31日,如果是星期一则会…有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 于是,“谣言制造商”又修改为星期日…1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?
请回答该年份(只写这个4位整数,不要写12月31等多余信息)

start = 1999
a = 0
day = 0
while start <=9999:
    day += 36522# 一百年的总天数
    start += 100
    a = day % 7
    if a == 2:
        break
print(start)

2.马虎的算式

小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。有一次,老师出的题目是:36 x 495 = ? 他却给抄成了:396 x 45 = ? 但结果却很戏剧性,他的答案竟然是对的!!因为 36 * 495 = 396 * 45 = 17820 类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)能满足形如:ab * cde = adb * ce 这样的算式一共有多少种呢?请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。答案直接通过浏览器提交。注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。

sum=0
for a in range(1,10):

    for b in range(1,10):
        if a==b:
            continue
        for c in range(1,10):
            if a==c or b==c:
                continue
            for d in range(1, 10):
                if d==c or d==a or d==b:
                    continue
                for e in range(1, 10):
                    if e==d or e==c or e==a or e==b:
                        continue
                    else:
                        if (a*10+b)*(c*100+d*10+e)==(a*100+d*10+b)*(c*10+e):
                            sum+=1
print(sum)

3.振兴中华

小明参加了学校的趣味运动会,其中的一个项目是:跳格子。地上画着一些格子,每个格子里写一个字,如下所示
从我做起振
我做起振兴
做起振兴中
起振兴中华
比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。 要求跳过的路线刚好构成“从我做起振兴中华”这句话。
请你帮助小明算一算他一共有多少种可能的跳跃路线呢?
答案是一个整数,请通过浏览器直接提交该数字。
注意:不要提交解答过程,或其它辅助说明类的内容。

# def ans(a, b):
#     if a == 0 or b == 0:
#         return 1
#     else:
#         return ans(a - 1, b) + ans(a, b - 1)
# res = ans(3, 4)
# print(res)

4.斐波那契数列

n=int(input())
f1,f2=1,1
for i in range(3,n+1):
    f1,f2=f2%10007,(f1+f2)%10007
print(f2)

5.武功秘籍

小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。
小明只想练习该书的第81页到第92页的武功,又不想带着整本书。请问他至少要撕下多少张纸带走?
这是个整数,请通过浏览器提交该数字,不要填写任何多余的内容。

def page(a,b):
    if a%2==0 and b%2!=0:
        print(int(b-a)//2+1)
    if a%2!=0 and b%2==0:
        print(int(b-a)//2+2)
page(81,92)

6.切面条

一根高筋拉面,中间切一刀,可以得到2根面条。
如果先对折1次,中间切一刀,可以得到3根面条。
如果连续对折2次,中间切一刀,可以得到5根面条。
那么,连续对折10次,中间切一刀,会得到多少面条呢?

def sum(n):
    print(2**n+1)
sum(10)

7.立方变自身

观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17

请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?
请填写该数字,不要填写任何多余的内容或说明性的文字。

a=[]
for i in range(1,1000):
    sum=0
    k=i**3
    q=list(str(k))
    for j in q:
        sum+=int(j)
    if sum==i:
        a.append(i)
print(len(a))

8.圆的面积

import math
r=int(input())
s=math.pi*(r**2)
print('{:.7f}'.format(s))

9.字母图形

try:
    s='ABCDEFGHIGKLMNOPQRSTUVWXYZ'
    n,m=input().split()
    a=s[0:eval(m)]
    for i in range(1,eval(n)+1):
        print(a)
        a=s[i]+a[0:-1]
except:
    pass

10.Huffuman树

n=int(input())
pi=list(map(int,input().split()))
a=[]
s=0
while len(pi)!=1:
    pi.sort(reverse=True)
    pa=pi.pop()
    pb=pi.pop()
    a.append(pa+pb)
    pi.append(pa+pb)
for i in range(len(a)):
    s+=a[i]
print(s)

你可能感兴趣的:(#,Python基础,python)