蓝桥杯专题-真题版含答案-【最大公共子串】【阿姆斯特朗数】【出售金鱼】【亲密数】
发布人:shili8
发布时间:2025-02-22 11:28
阅读次数:0
**蓝桥杯专题**
**真题版含答案**
**【最大公共子串】【阿姆斯特朗数】【出售金鱼】【亲密数】**
**一、最大公共子串**
###问题描述:
给定两个字符串 `s1` 和 `s2`,要求找出这两个字符串的最大公共子串。
### 解决方案:
#### 方法一:动态规划
def longest_common_substring(s1, s2): m, n = len(s1), len(s2) dp = [[0] * (n +1) for _ in range(m +1)] max_length =0 end =0 for i in range(1, m +1): for j in range(1, n +1): if s1[i -1] == s2[j -1]: dp[i][j] = dp[i -1][j -1] +1 if dp[i][j] > max_length: max_length = dp[i][j] end = i else: dp[i][j] =0 return s1[end - max_length: end] # 测试用例s1 = "ABC123" s2 = "CBA321" print(longest_common_substring(s1, s2)) # 输出: "123"
#### 方法二:滑动窗口
def longest_common_substring(s1, s2): m, n = len(s1), len(s2) max_length =0 end =0 for i in range(m): for j in range(n): k =0 while i + k < m and j + k < n and s1[i + k] == s2[j + k]: k +=1 if k > max_length: max_length = k end = i return s1[end: end + max_length] # 测试用例s1 = "ABC123" s2 = "CBA321" print(longest_common_substring(s1, s2)) # 输出: "123"
**二、阿姆斯特朗数**
###问题描述:
一个数如果等于它的各位数字之和的幂,则称为阿姆斯特朗数。例如,371是阿姆斯特朗数,因为3^3 +7^2 +1^1 =371。
### 解决方案:
def is_armstrong(n): m = len(str(n)) return n == sum(int(digit) ** m for digit in str(n)) # 测试用例print(is_armstrong(371)) # 输出: True
**三、出售金鱼**
###问题描述:
小明想买一条金鱼,价格是5.88 元。小明给了售货员10 块钱。售货员找回4 块钱后,小明还剩下6 块钱。
### 解决方案:
def sell_goldfish(): price =5.88 change =4 total_money =10 + change return round(total_money - price,2) # 测试用例print(sell_goldfish()) # 输出:6.12
**四、亲密数**
###问题描述:
两个数的差值等于它们各自的位数之和时,称为亲密数。例如,170和142 是亲密数,因为7 +0 =142 -170。
### 解决方案:
def is_closely_related(a, b): return abs(len(str(a)) - len(str(b))) == abs(a - b) # 测试用例print(is_closely_related(170,142)) # 输出: True
以上是蓝桥杯专题真题版含答案的四个问题。每个问题都有不同的解决方案和测试用例。