蓝桥杯-第十一届蓝桥杯大赛软件类决赛 Python题解

#答案
ans=0
#判断number是否含有数字2
def judge(number):
    while number!=0:
        a=number%10
        if a==2:
            return True
        number//=10
    return False

for i in range(1,2021):
    if judge(i):
        ans+=1

print(ans)

#答案
ans=0
#判断number是否为合数
def judge(number):
    for i in range(2,number):
        if number%i==0:
            return True
    return False

for i in range(1,2021):
    if judge(i):
        ans+=1

print(ans)

 

 补充一个定理:

# p[i]表示第i个数分解时一共用了多少个
p = [0 for i in range(101)]
# 对2-100每一个数字进行质因数分解
for number in range(2, 101):
    # 当前要分解的数字
    now_number = number
    # 质因数分解
    j = 1
    while j <= (now_number // j):
        j += 1
        # 求用了多少个这个数字
        while now_number % j == 0:
            p[j] += 1
            now_number //= j
    # 最后分解完剩下一个数字
    if now_number > 1:
        p[now_number] += 1

# 根据公式求约数个数
ans = 1
for i in range(2, 101):
    if p[i] != 0:
        ans *= (p[i] + 1)

print(ans)

 

 

# 读入字符串
s = ''
# 打开文件,读入字符串
with open('E:/code/刷题/inc.txt', 'r') as f:
    s = f.readline()
# 去掉结尾的换行
s = s[:-1]
# 字符串的长度
length = len(s)
# dp数组
dp = [1] * length
# 答案
ans = 0
for i in range(length):
    for j in range(i):
        # 如果当前字符大于以前的字符
        if s[i] > s[j]:
            # 把当前字符添加到前面上升字符序列的末尾
            dp[i] += dp[j]
        # 如果当前字符等于以前的字符
        if s[i] == s[j]:
            # 去掉重复的
            dp[i] -= dp[j]
for i in dp:
    ans += i
print(ans)

 

# 依次将数字1放入16个格子中
# 利用深度搜索找到可能的方案
# 题目中90度的意思是只能从当前位置
# 向上,下,左,右四个方向进行搜索
# 最终答案
ans = 0
# 方格
grid = [[0] * 4 for i in range(4)]
# 状态标记,当前位置是否已经填充数字
visit = [[False] * 4 for i in range(4)]
# 上,右,下,左四个方向
dir_x = [-1, 0, 1, 0]
dir_y = [0, 1, 0, -1]


# 深度搜索
def dfs(x, y, now_number):
    global ans
    """
    :param x: 当前所在的行
    :param y: 当前所在的列
    :param now_number: 当前填充的数字
    :return: 
    """
    # 搜索边界,填完了16个数字就可以
    # 没有进一步的要求
    if now_number == 16:
        ans += 1
        return
    # 搜索
    # 向四个方向
    for i in range(4):
        new_x = x + dir_x[i]
        new_y = y + dir_y[i]
        # 如果没有越界,且当前位置没有填充数字
        if 0 <= new_x <= 3 and 0 <= new_y <= 3 and (not visit[new_x][new_y]):
            # 标记
            visit[new_x][new_y] = True
            # 进行搜索,填下一个数字
            dfs(new_x, new_y, now_number + 1)
            # 回退,取消标记
            visit[new_x][new_y] = False


# 对格子的每一个位置进行试探
for i in range(4):
    for j in range(4):
        visit[i][j] = True
        dfs(i, j, 1)
        visit[i][j] = False

print(ans)

 

# 第一个甲子年是124年
# 天干-甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊
# (wù)、己(jǐ)、庚(gēng)、辛(xīn)、壬(rén)、癸(guǐ)。
#
# 地支-子(zǐ)、丑(chǒu)、寅(yín)、卯(mǎo)、
# 辰(chén)、巳(sì)、午(wǔ)、未(wèi)、申(shēn)、酉(yǒu)、戌(xū)、
# 亥(hài)。

# 天干列表
tian_gan_list = ['jia', 'yi', 'bing', 'ding', 'wu', 'ji', 'geng', 'xin', 'ren', 'gui']
# 地支列表
di_zhi_list = ['zi', 'chou', 'yin', 'mao', 'chen', 'si', 'wu', 'wei', 'shen', 'you', 'xu', 'hai']
# 输入的年份
n = int(input())
# 答案
ans = ''
# 当前年份
i = 123
tian_gan_id = 0
di_zhi_id = 0
while i < n:
    i += 1
    # 第一年是甲子年
    ans = tian_gan_list[tian_gan_id] + di_zhi_list[di_zhi_id]
    # 轮回
    tian_gan_id = (tian_gan_id + 1) % 10
    di_zhi_id = (di_zhi_id + 1) % 12

print(ans)

猜你喜欢

转载自blog.csdn.net/Talantfuck/article/details/124557011
今日推荐