习题一
考察:
会使用 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。