【思特奇杯·云上蓝桥-算法集训营】第1周

1.跑步训练

​​a = 10000
i = 0
while True:
    a -= 600
    i += 60
    if a <= 0:
        a += 600
        b = a/10
        i = i+b-60
        print(int(i))
        break
    a += 300
    i += 60

输出3880

2.阶乘约数

a = 1
for i in range(1,101):
    a *=i
j,ans = 2,1
while j<(a//j):
    b = 1
    while a%j==0:
        a//=j
        b +=1
    ans *=b
    j +=1
if a > 1:
    ans *=2
print(ans)

输出39001250856960000

3.出栈次序

def fic(a, b):
    if a == 0:
        return 1
    if b == 0:
        return fic(a-1, 1)
    return fic(a-1, b+1)+fic(a, b-1)
print(fic(16, 0))

 输出35357670

4.哥德巴赫分解

x = []
def gdbh(n):
    def IsPrime(num):
        if num == 2:
            return True
        for i in range(2,num):
            if num % i == 0:
                return False
        return True

    for j in range(2, n // 2 + 1):
        if IsPrime(j) and IsPrime(n - j):
            return [j,n-j]
for i in range(4,10001,2):
    x.append(min(gdbh(i)))
print(max(x))

输出173

5.图书排列

import itertools
res = 0
x = [i for i in range(10)]
def check(a):
    for i in range(9):
        if abs(a[i]-a[i+1]) == 1:
            return False
    return True
for i in itertools.permutations(x, 10):
    if check(i):
        res += 1
print(res)

输出479306

6.猴子分香蕉



n = 10
while True:
    if n % 5 == 1:
        a = (n - 1) / 5 * 4
        if int(a) % 5 == 2:
            b = (a - 2) / 5 * 4
            if int(b) % 5 == 3:
                c = (b - 3) / 5 * 4
                if int(c) % 5 == 4:
                    d = (c - 4) / 5 * 4
                    if int(d) % 5 == 0 and d != 0:
                        break
    n += 1
print(n)

输出3141

 7.稍小分数

from fractions import Fraction
def check(x):
    if x == 2:
        return True
    for i in range(2, x):
        if x%i==0:
            return False
    return True

if __name__ == '__main__':
    m = []
    All = []
    for i in range(2, 100):
        if check(i):
            m.append(i)
    print(m)
    for i, j in enumerate(m):
        for k in m[:i]:
            a = Fraction(k, j)
            if a not in All:
                All.append(a)
    All = sorted(All)
    print(All)
    a = int(input('输入分子:'))
    b = int(input("输入分母:"))
    num = Fraction(a, b)
    out = False
    for i in range(len(All)):
        if All[i] >= num:
            print(All[i-1])
            out = True
            break
    if not out:
        print(All[-1])

8.excel地址

x = [chr(i) for i in range(65,91)]
n = int(input())
res = []
while n != 0:
    if n % 26 == 0:
        res.append(26)
        n = n // 26 - 1
    else:
        res.append(n % 26)
        n = n//26
for i in range(len(res)):
    res[i] = x[res[i]-1]
    res.reverse()
print(''.join(res))

 9.日期问题

n = input()
a = []
m = {1:31, 2:30, 3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}
a.append(n[:2])
a.append(n[3:5])
a.append(n[6:])
res = []
if int(a[0]) in range(60):
    res.append(['20'+a[0]])
    res[0].append(a[1])
    res[0].append(a[2])
    if int(a[2]) > m[int(a[1])] or int(a[1]) > 12:
        res[-1] = []
else:

    res.append(['19'+a[0]])
    res[0].append(a[1])
    res[0].append(a[2])
    if int(a[2]) > m[int(a[1])] or int(a[1]) > 12:
        res[-1] = []
if int(a[2]) in range(60):
    res.append(['20'+a[2]])
    res[1].append(a[1])
    res[1].append(a[0])
    if int(a[0]) > m[int(a[1])] or int(a[1]) > 12:
        res[-1] = []
else:

    res.append(['19'+a[2]])
    res[1].append(a[1])
    res[1].append(a[0])
    if int(a[0]) > m[int(a[1])] or int(a[1]) > 12:
        res[-1] = []
if int(a[2]) in range(60):

    res.append(['20'+a[2]])
    res[2].append(a[0])
    res[2].append(a[1])
    if int(a[0]) > 12 or int(a[1]) > m[int(a[0])]:
        res[-1] = []
else:

    res.append(['19'+a[2]])
    res[2].append(a[0])
    res[2].append(a[1])
    if int(a[0]) > 12 or int(a[1]) > m[int(a[0])]:
        res[-1] = []
a = []
print(res)
for i in range(3):
    if res[i] != []:
        a.append('-'.join(res[i]))
print(a)

10.整数划分

 def f(n,a,k):
     if n <= 0:
         for i in range(k):
             print(a[i], end='')
         print()
         return
     for i in range(n, 0, -1):
         if k > 0 and i < a[k-1]:
             continue
         a[k] = i
         f(n-i, a, k+1)
 a = [0] * 10000
 f(6, a, 0)

11.一步之遥

x = 97
y = 127
ans = 600
for i in range(300):
    for j in range(300):
        if i*x - j* y==1:
            ans = min(ans, i+j)
print(ans)

12.机器人推塔

​
import math

def check():
    a = 0
    b = 0
    tmp = row
    while tmp >0:
        for i in range(1, tmp+1):
            if cnt[i] == 1:
                a +=1
            else:
                b += 1
        for i in range(2, tmp+1):
            if cnt[i-1]==cnt[i]:
                cnt[i-1] = 1
            else:
                cnt[i-1] = 2
        tmp -=1
    if a == m and b == n:
        return True
    else:
        return False

def dfs(k):
    global res
    if k > row:
        if check():
            res +=1
        return
    cnt[k] = 1
    dfs(k+1)
    cnt[k] = 2
    dfs(k+1)

if __name__ == "__main__":
    m = int(input())
    n = int(input())
    res = 0
    cnt = [0 for _ in range(100010)]
    row = int(math.sqrt(2*(m+n)))
    dfs(1)
    print(res)

​

13.七星填空

import itertools

x = [i for i in range(1, 15)]

x.remove(6)
x.remove(11)
x.remove(14)

def check(a):
    num1 = a[0] + a[1] + a[2] + a[3]
    num2 = 6 + a[1] + a[4] + 14
    if num1 != num2:
        return False
    num3 = 6 + a[2] + a[5] + 11
    if num2 != num3:
        return False
    num4 = a[3] + a[5] + a[7] + a[10]
    if (num3 != num4):
        return False
    num5 = a[8] + a[9] + a[7] + 11
    if (num4 != num5):
        return True
    num6 = a[6] + a[10] + a[8] + 14
    if (num5 != num6):
        return False
    num7 = a[0] + a[4] + a[6] + a[9]
    if (num6 != num7):
        return False
    return True

for i in itertools.permutations(x):
    if check(i):
        print(i)
        for j in range(4):
            print(i[j])
        break

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值