python02

习题一
考察:
会使用 input() 输入数据;
会把字符串转换成整数: int() ;
会用整除 // ;
会用取余 % ;
本质上是贪心思想的入门应用
题型 1:输入一个整数,求商和余数
例如:

输入一个秒数,把它转换成"多少小时、多少分钟、多少秒"。

输入:3661

输出:1 1 1

python 复制代码
n = int(input())

h = n // 3600
m = n % 3600 // 60
s = n % 60

print(h, m, s)

题型 2:凑零钱 / 凑纸币

例如:

输入一个金额,尽量用 100 元、50 元、20 元、10 元、5 元、1 元组成,输出每种面值需要几张。

这就是典型贪心。

python 复制代码
money = int(input())

a100 = money // 100
money = money % 100

a50 = money // 50
money = money % 50

a20 = money // 20
money = money % 20

a10 = money // 10
money = money % 10

a5 = money // 5
money = money % 5

a1 = money

print(a100, a50, a20, a10, a5, a1)

题型 3:买东西找零

例如:

输入商品价格和付款金额,输出找零金额,并按 50、20、10、5、1 分解。

python 复制代码
price = int(input())
pay = int(input())

change = pay - price

a50 = change // 50
change = change % 50

a20 = change // 20
change = change % 20

a10 = change // 10
change = change % 10

a5 = change // 5
change = change % 5

a1 = change

print(a50, a20, a10, a5, a1)

题型 4:判断奇偶数

%

python 复制代码
n = int(input())

if n % 2 == 0:
    print("偶数")
else:
    print("奇数")

题型 5:分组问题

例如:

每辆车最多坐 4 人,输入人数,问至少需要几辆车。

这个题经常考 //%

python 复制代码
n = int(input())

car = n // 4
if n % 4 != 0:
    car = car + 1

print(car)

习题三
会定义递归函数;
理解递归出口;
会把大问题变成小问题;
练习1:递归计算字符串长度

python 复制代码
def str_len(s):
    if s == "":
        return 0
    return 1 + str_len(s[1:])

训练递归出口和缩小字符串。

不要第一个,保留后面的

python 复制代码
def str_len(s):
    if s == "":
        return 0
    return 1 + str_len(s[:-1])

保留前面的,不要最后一个
练习2:递归统计字符个数
输入一个字符串和一个字符,递归统计该字符出现的次数。

python 复制代码
def count_char(s, ch):
    if s == "":
        return 0
    if s[0] == ch:
        return 1 + count_char(s[1:], ch)
    else:
        return count_char(s[1:], ch)

练习3:二分查找
在一个有序列表中,使用递归查找指定元素的位置

python 复制代码
def binary_search(nums, target, left, right):
    # 递归出口:查找范围不存在
    if left > right:
        return -1

    # 找到中间位置
    mid = (left + right) // 2

    # 如果中间元素正好等于目标值
    if nums[mid] == target:
        return mid

    # 如果目标值比中间元素小,到左半部分查找
    elif target < nums[mid]:
        return binary_search(nums, target, left, mid - 1)

    # 如果目标值比中间元素大,到右半部分查找
    else:
        return binary_search(nums, target, mid + 1, right)


nums = [1, 3, 5, 7, 9, 11]
target = int(input())

result = binary_search(nums, target, 0, len(nums) - 1)
print(result)

习题四
要求
输入一个字符串,找出其中连续重复次数最多的字符及其次数。
输入示例: aaabbbccdddd
输出示例: d 出现了4次

python 复制代码
s = input()

max_char = s[0]
max_count = 1

current_char = s[0]
current_count = 1

for i in range(1, len(s)):
    if s[i] == current_char:
        current_count += 1
    else:
        if current_count > max_count:
            max_count = current_count
            max_char = current_char

        current_char = s[i]
        current_count = 1

# 最后一组也要判断
if current_count > max_count:
    max_count = current_count
    max_char = current_char

print(max_char, "出现了", max_count, "次")

习题五
容器的相关应用
容器"一般就是考:

复制代码
list     列表
tuple    元组
dict     字典
set      集合

最可能考的是 字典统计次数

例如:

输入一个字符串,统计每个字符出现次数。

输入:

复制代码
aabbc

输出:

复制代码
{'a': 2, 'b': 2, 'c': 1}
python 复制代码
s = input()

d = {}

for ch in s:
    if ch in d:
        d[ch] += 1
    else:
        d[ch] = 1

print(d)

也可能考找出现次数最多的字符:

python 复制代码
s = input()

d = {}

for ch in s:
    d[ch] = d.get(ch, 0) + 1

max_char = ""
max_count = 0

for ch in d:
    if d[ch] > max_count:
        max_count = d[ch]
        max_char = ch

print(max_char, max_count)

这里重点记:

复制代码
d.get(ch, 0)

意思是:如果字典里有 ch,就取它原来的次数;如果没有,就当作 0

相关推荐
罗西的思考19 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队1 天前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
To_OC2 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC2 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK2 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
_清歌2 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法
统计实现局2 天前
SVD 的三步走:双对角化、Givens 收敛、排序
算法
躬行见万象2 天前
《VLA 系列》UniLab 强化训练 | G1 机器人 |复现
算法
统计实现局2 天前
对称不定分解(Bunch-Kaufman):为什么 Cholesky 不够用
算法