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。

相关推荐
UIU1146 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
论文复现现场7 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi7 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
秋天的怀念_David8 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院9 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
niyongsheng9 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
j7~11 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
傅科摆 _ py12 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
Shaoshing13 小时前
LeetCode100 42.接雨水
java·算法·leetcode
域限奇点访客13 小时前
用AI生成问卷的网站怎么选?看题目录入结构、题型映射和生成后的校验
算法