蓝桥杯手算题和杂题简易做法

发布于:2025-08-16 ⋅ 阅读:(13) ⋅ 点赞:(0)

一、巧用Excel

Excel在解决某些数学问题时非常高效,特别是涉及表格计算、简单统计和可视化分析时。

门牌制作

这道题是一道基础题,只需要判断每个数字有几个2,然后在加起来即可,但是还有更简单的方法,先通过编译器,将1-2020输出出来,然后将其复制到Excel上,使用Excel上的查找功能,然后用替换功能将2替换成任何字符,从弹出的替换结果对话框中可以可能到完成“642”处的替换,因此答案就是624

日期问题

在Excel中,在A1单元格中输入日期1901年1月1日,在B1单元格中输入日期2000年12月31日,然后将B1与A1相减得到36524天,然后chu'y

二、手算技巧

对于简单的计算题,手算可能是最快的方法,但要注意:

  1. 确保计算精度
  2. 验证计算结果
  3. 适用于小规模数据

三、Python的优势

Python在处理字符、大数运算、日期问题等方面具有明显优势。

1. 日期处理

Python的datetime库提供了强大的日期处理功能:

from datetime import *

date1 = datetime(1901, 1, 1)
date2 = datetime(2000, 12, 31)
print(date1.weekday())  # 周一为0,周日为6
timedelta = date2 - date1
print(timedelta.days // 7)  # 计算周数差

2. 顺子日期问题

Python实现:

from datetime import *

date1 = datetime(2022, 1, 1)
cnt = 0
for i in range(0, 365):
    s = "%02d%02d%02d" % (date1.year, date1.month, date1.day)
    date1 += timedelta(days=1)
    if "012" in s or "123" in s or "234" in s or "345" in s or "456" in s or "678" in s or "789" in s:
        cnt += 1
print(cnt)

C++实现:

#include <bits/stdc++.h>
using namespace std;

int months[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool check(string s) {
    for(int i = 0; i+2 < s.size(); i++)
        if(s[i]+1 == s[i+1] && s[i]+2 == s[i+2])
            return true;
    return false;
}

int main() {
    int y = 2022, m = 1, d = 1;
    int cnt = 0;
    for(int i = 0; i < 365; i++) {
        char s[10];
        sprintf(s, "%04d%02d%02d", y, m, d);
        if(check(s)) cnt++;
        d++;
        if(d > months[m]) {
            d = 1;
            m++;
        }
    }
    cout << cnt << endl;
    return 0;
}

四、大数运算

Python处理大数运算非常方便,无需考虑溢出问题。

1. 乘积尾零问题

nums = [5650, 4542, 3554, ...]  # 100个数字
s = 1
for i in nums:
    s *= i
cnt = 0
while s % 10 == 0:
    s //= 10
    cnt += 1
print(cnt)

2. 大数相乘问题

Python解法:

for i in range(1, 1000000008):
    if (i * 2021) % 1000000007 == 999999999:
        print(i)
        break

C++需要使用快速幂和模逆元:

#include <iostream>
using namespace std;

const long long MOD = 1000000007;

long long fastPow(long long a, long long b, long long mod) {
    long long res = 1;
    a %= mod;
    while (b > 0) {
        if (b % 2 == 1) {
            res = (res * a) % mod;
        }
        a = (a * a) % mod;
        b /= 2;
    }
    return res;
}

int main() {
    const long long target = 999999999;
    const long long multiplier = 2021;
    long long inv_2021 = fastPow(multiplier, MOD - 2, MOD);
    long long i = (target * inv_2021) % MOD;
    cout << i << endl;
    return 0;
}

五、字符处理

Python在字符串处理方面非常强大。

1. 平方和问题

Python实现:

sum = 0
for i in range(1, 2020):
    s = str(i)
    if '2' in s or '0' in s or '1' in s or '9' in s:
        sum += i * i
print(sum)

C++实现:

#include <bits/stdc++.h>
using namespace std;

bool containsDigits(int num) {
    string s = to_string(num);
    for (char c : s) {
        if (c == '2' || c == '0' || c == '1' || c == '9') {
            return true;
        }
    }
    return false;
}

int main() {
    long long sum = 0;
    for (int i = 1; i < 2020; ++i) {
        if (containsDigits(i)) {
            sum += i * i;
        }
    }
    cout << sum << endl;
    return 0;
}

2. 三角回文数

for k in range(4000, 20000):
    n = k * (k + 1) // 2
    s = str(n)
    if s[::-1] == s:
        print(k, n)
        break

六、杂题技巧

蓝桥杯中有些题目不需要复杂算法,主要考察思维逻辑。

1. 裁纸刀问题

两种解法:

  1. 模拟法:4(边界) + 19(行) + 21×20(列) = 443
  2. 扩展法:4(边界) + 439(增加纸张) = 443

2. 修建灌木

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    for(int i = 0; i < n; i++) {
        cout << max(i, n-i-1) * 2 << endl;
    }
    return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到