ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-01-08 16:04:44  阅读:136  来源: 互联网

标签:__ 集训营 return res 蓝桥 range print False 云上


第一题:跑步训练

答案:3880

代码如下

第二题:阶乘约数

答案:39001250856960000

代码如下

#阶乘约数
n = 100
# 因为数不大,就用最普通的方法统计质数了。
p = [2]
for i in range(3, n + 1):
    j = 2
    while j < i:
        if i % j == 0: break
        j += 1
    else: p.append(i)
#print(p) # 2 3 5 7 ... 97(求出所有的质数。)
m = {}
for i in p: m[i] = 1 # 每个质数初始为 1,代表不选这个质数的可能。
for i in range(2, n + 1): # 遍历 [2, 100]
    x = i
    for j in p: # 遍历质数,将每个被乘数都质因数分解一下。
    # (比如 6 分解成 2*3 ,12 分解成 2*2*3)
        if j > x: break
        while x % j == 0:
            x //= j
            # 让对应的质数个数 + 1
            m[j] += 1
s = 1
# 所有质因子的个数相乘,就是约数个数了。
for i in m.values():
    s *= i
print(s)

 第三题:出栈次序

答案:35357670

代码如下

 第四题:哥德巴赫分解

答案:173

代码如下

def find(n):
    def IsPrime(num):
        if num < 2:
            return False
        if num == 2:
            return True
        for w in range(2,num):
            if num % w == 0:
                return False
        return True

    for i in range(2, n // 2 + 1):
        if IsPrime(i) and IsPrime(n - i):
            return [i,n-i]

ls = []
for i in range(4,10001,2):
    ls.append(min(find(i)))
print(max(ls))

 运行结果如下:

第五题:图书排列

答案:479306

代码及运行结果如下:

 

第六题:猴子分香蕉 

答案:3141

代码及运行结果如下

第七题: 代码如下

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])

第八题: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))

第九题:日期问题

代码如下

def solution(all_date):
    for date in all_date:
        flag = 1
        s = ''
        #年份
        if date[0] >= '60' and date[0] <= '99':
            s = s + '19' + date[0] + '-'
        elif date[0] < '60' and date[0] > '00':
            s = s + '20' + date[0] + '-'
        else:
            flag = 0
        #月份
        if date[1] > '00' and date[1] <= '12':
            s = s + date[1] + '-'
        else:
            flag = 0
        #日
        if date[2] > '00' and date[2] <= '31':
            s = s + date[2]
        else:
            flag = 0
        if flag == 1:
            print(s)
    return
if __name__ == '__main__':
    s = '02/03/04'
    date = [s[:2],s[3:5],s[6:]]
    all_date = [#日期的三种可能情况
        [date[0],date[1],date[2]],
        [date[2],date[0],date[1]],
        [date[2],date[1],date[0]]]
    all_date.sort()
    solution(all_date)


第十题:整数划分

代码如下

#整数划分

def solution(n):
    ans = [[n]]
    for i in range(1,n):
        a = [[n]]
        while a[-1][-1] - i> 0:
            tmp = a[-1][:-1] + [i,a[-1][-1] - i]
            tmp.sort()
            if tmp not in a:
                a.append(tmp)
        for j in a:
            if j not in ans:
                ans.append(j)
    #for j in ans:
    #   print(j)
    return len(ans)
            

if __name__ == '__main__':
    n = 5
    ans = solution(n)
    print(ans)

第十一题:一步之遥

答案:97

代码及运行结果如下

第十二题:机器人塔

代码如下

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)

 第十三题:七星填空

代码如下:

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

标签:__,集训营,return,res,蓝桥,range,print,False,云上
来源: https://blog.csdn.net/m0_57569238/article/details/122380563

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有