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

相关推荐
瓦特what?1 小时前
位运算核心技巧与应用
java·jvm·算法
无限码力1 小时前
阿里算法岗 0530笔试真题 - 荆棘林的最优砍断计划
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试真题·阿里巴巴笔试真题
随意起个昵称1 小时前
线性dp-LIS题目5(导弹拦截,二分优化)
c++·算法·动态规划
winlife_1 小时前
全程用 AI 做一款商业级手游 · EP10 道具系统:让三个按钮真正改变棋盘
windows·算法·unity·ai编程·游戏开发·mcp·玩法系统
计算机安禾2 小时前
【数据库系统原理】第16篇:范式理论(下):多值依赖与第四范式——消除非平凡的非函数依赖
算法
lqqjuly2 小时前
一致性模型深度解析
人工智能·深度学习·算法
RisunJan2 小时前
Linux命令-patch (为开放源代码软件安装补丁程序)
linux·服务器·算法
一条大祥脚2 小时前
ABC460贪心|多源BFS|数论|计数|线段树|树的直径
算法·宽度优先
小欣加油2 小时前
leetcode121买卖股票的最佳时机
数据结构·c++·算法·leetcode·职场和发展