第16届蓝桥杯模拟赛解答 填空题题解(python版)

在这里先给出填空题题解,后续会给出大题题解。在我所有代码中,除了使用少量必要内置函数外,我并未使用任何一个库,这样我才认为是真正的程序设计。

1、2024的质因数个数

1.1 思路:简单粗暴,用暴力解题即可。值得注意的是在寻找质数的过程中,偶数是不可能为质数的,所以第一个循环的步长为2;而在对应数的平方根之前的所有数,都是有对应的数去对应的,所以第二个循环的范围缩小很多(这是个数学方面的知识);

1.2 答案:3

1.3 代码:

n = []
for i in range(1,2025,2):
    a = True
    for j in range(2,int(i**0.5)+1):
        if i % j == 0:
            a = False
    if a == True and 2024 % i == 0:
        n.append(i)
print(len(n))

22024开方多少次为1

2.1 思路:还是暴力。

2.2 答案:4

2.3 代码:

n = 2024
count = 0
while n > 1:
    n = int(n**0.5)
    count += 1
print(count)

3、几的三次方大于2024

3.1 思路:这是个实实在在的算数题,逻辑思维不大,找到最小的一个数的三次方大于2024的,然后减去2024即可。这里循环的范围靠感觉设定即可,

3.2 答案:173

3.3 代码:

n = 0
for i in range(1,100):
    if i ** 3 >= 2024:
        n = i ** 3 - 2024
        break
print(n)

4、日期问题

4.1 思路:这题是蓝桥杯的常见题目,每年都会来一题与月份,年份相关的题目。这个其实也是暴力,把从1901年到2024年的所有天数偏历一次并加以判断即可。

4.2 答案:762

4.3 代码:

def A(year):    # 判断是否为闰年
    if (year % 4 == 0 and year % 100 != 0) or (year % 400) == 0:
        return True
    else:
        return False
def B(year,month):    #给出对应月份的天数
    if month == 2 and A(year):
        return 29
    elif month == 2 and not A(year):
        return 28
    elif month in [4,6,9,11]:
        return 30
    else:
        return 31
def C(start_year,end_year):
    count = 0
    day_week = 1
    for year in range(start_year,end_year+1):
        for month in range(1,13):
            for day in range(1,B(year,month)+1):
                if day % 10 == 1 and day_week == 0:
                    count += 1
                day_week = (day_week + 1) % 7
    return count
print(C(1901,2024))

5、异或后的平方和最小

5.1 思路 也是暴力解题,逻辑性不大。这个数v肯定不超过这30个整数的最大数(假设 V 超过了这 30 个数的最大数 M,那么 V 在某些位上会有额外的 1,而这些额外的 1 会在异或运算中影响结果。具体来说,如果 V 的某一位上有 1,而所有 xi 在这一位上都是 0,那么 xi⊕V 在这一位上都会变成 1,从而增加平方和。)这里面涉及了一些数学上的理解,其实写题的时候可以把这个数设置的大一点,不用考虑这么多,反正已经是使用暴力了。

5.2 答案:1070293541

5.3 代码:

n = [9226, 4690, 4873, 1285, 4624, 1596, 6982, 590, 8806, 121, 8399, 8526, 5426, 64, 9655, 7705, 3929, 3588, 7397, 8020, 1311, 5676, 3469, 2325, 1226, 8203, 9524, 3648, 5278, 8647]
a = max(n)
min_squared_sum = float('inf')
for i in range(a + 1):
    xor_results = [x ^ i for x in n]
    squared_sum = sum(x ** 2 for x in xor_results)
    if squared_sum < min_squared_sum:
        min_squared_sum = squared_sum
        best_V = i
print(min_squared_sum)

作者:丁八万

物联沃分享整理
物联沃-IOTWORD物联网 » 第16届蓝桥杯模拟赛解答 填空题题解(python版)

发表回复