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

第一题:跑步训练

s = 10000
v1 = 600 
v2 = 300
use = v1 - v2   #表示二分钟消耗的体力
t1 = (s // use) -1
t2 = s - use*t1  #t1分钟后剩下的体力
v3 = v1 // 60   #表示每休息一秒钟消耗的体力
time = t1*2 *60 + t2 // v3
print(time)

答案:3880 

第二题:阶乘约数

fac = [2]
for i in range(2,101):
    for j in range(2,i):
        if i %j == 0:
            break
        if j == i-1:
            fac.append(i)
print(fac)
total = 1
fac_dic = {}
for i in fac:
    fac_dic[i] = 0
for i in range(2,101):
    for j in fac:
        if i < j:
            break
        while i % j == 0:
            fac_dic[j] += 1
            i //= j
print(fac_dic)
for val in fac_dic.values():
    total *= (val+1)
print(total)

答案:39001250856960000 

第三题:出栈次序

def f(x):
    sum = 0
    if x == 0 or x == 1:
        return 1
    elif x > 0:
        for i in range(x):
            sum += f(i)*f(x-i-1)
    return sum
x = 16
print(f(x))

答案:35357670 

第四题:哥德巴赫分解

def prime(x):
    for i in range(2,x):
        if x%i == 0:
            return False
    return True
import itertools
li = []
ls = []
for i in range(2,10000):
    if prime(i):
        li.append(i)
tmp = list(itertools.combinations(li,2))
for j in range(4,10000,2):
    for m in tmp:
        if j == sum(m):
            ls.append(min(m))
            break
print(max(ls))

答案:173 

第五题:图书排列

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

答案:479306 

第六题:猴子分香蕉

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

答案:3141 

第七题:稍小分数

def judge(a,b):
    if a>b:
        return False
    else:   
        ls1 = set()
        ls2 = set()
        for i in range(1,a+1):
            if a%i == 0:
                ls1.add(i)
        for i in range(1,b+1):
            if b%i == 0:
                ls2.add(i)
        if ls1&ls2 == {1}:
            return True
        else:
            return False
m = int(input())    #输入的分数的分子
n = int(input())    #输入的分数的分母
ls = []
for i in range(1,101):
    for j in range(1,100):
        if judge(j,i) and j*n < m*i:
            ls.append((j,i))
max_nu = ls[0][0]/ls[0][1]
for m in range(len(ls)):
    if max_nu < ls[m][0]/ls[m][1]:
        max_nu = ls[m][0]/ls[m][1]
print("要求的分数是:{}/{}".format(ls[m][0],ls[m][1]))

第八题:excel地址

n = int(input())
ans = []
while n!= 0:
    if n % 26 == 0:
        ans.append(26)
        n = n//26 - 1
    else:
        ans.append(n%26)
        n = n // 26
for i in range(len(ans)):
	#加64把数字转化成字符,且是从列表最后向前打印
    print(chr(ans[len(ans)-i-1]+64), end='')

第九题:日期问题

不会

 第十题:整数划分

divide_number = {0: 0}
times = 0
def int_divide(number, index):
    global times
    for i in range(1, number+1):
        if i >= divide_number[index-1]:
            divide_number[index] = i
            number_rest = number - i
            if number_rest == 0:
                for j in range(1, index):
                    print(str(divide_number[j])+'+', end='')
                print(str(divide_number[index]))
            else:
                int_divide(number_rest, index+1)
        else:
            pass

n = int(input("输入一个整数:"))
int_divide(n, 1)
print("该整数的划分数为:%d" %times)

第十一题:一步之遥

for x in range(10000):
    for y in range(10000):
        t = 97*x - 127*y
        if t == 1:
            print(x+y)
            break

答案:97 

第十二题:机器人塔

a=list(map(int,input().split()))
s=sum(a)
ab=[1,2]
for i in range(2,1000):
    if s==((i+1)*i)//2:
        o=i
        break
c=[[0 for i1 in range(o+1)] for i in range(o+1)]
con=0
def ck(i,r,l):
    global a
    if a[i]-1>=0:                        
        c[r][l]=ab[i]                      
        a[i]-=1
        if l>=r:
            dfs(r-1,0)
        else:
            dfs(r,l+1)
        c[r][l]=0
        a[i]+=1
def dfs(r,l):
    global con
    if r==-1:
        con+=1
        return
    elif r==o-1:
        for i in range(2):
            ck(i,r,l)
    elif c[r+1][l]==c[r+1][l+1]:
        ck(0,r,l)
    elif c[r+1][l]!=c[r+1][l+1]:
        ck(1,r,l)

dfs(o-1,0)
print(con)

第十三题:七星填空

import itertools
li = [i for i in range(1,15)]
def check(a):
    a[0]=6
    a[7]=14
    a[8]=11
    num1 = a[1]+a[2]+a[3]+a[4]
    num2 = 6+a[2]+a[5]+a[7]
    if num1 != num2:
        return False
    num3 = 6+a[3]+a[6]+a[8]
    if num2 != num3:
        return False
    num4 = a[1]+a[5]+a[9]+a[12]
    if num3 != num4:
        return False
    num5 = a[4]+a[6]+a[10]+a[13]
    if num4 != num5:
        return False
    num6 = a[7]+a[9]+a[11]+a[13]
    if num5 != num6:
        return False
    num7 = a[8]+a[10]+a[11]+a[12]
    if num6 != num7:
        return False
    else:
        return True

for i in itertools.permutations(li,len(li)):
    if check(list(i)):
        ls = i
        break
for i in range(4):
    print(ls[i+1])

答案:10 3 9 8 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值