一、题目:比赛配对问题
思路:1. 初始化:设置一个变量 total_matches 来记录总的比赛次数,初始值为0。
-
循环:当队伍数
n大于1时,进行以下操作:- 如果
n是偶数,计算当前轮的比赛次数并更新total_matches,然后将n更新为n / 2。 - 如果
n是奇数,计算当前轮的比赛次数并更新total_matches,然后将n更新为(n - 1) / 2 + 1。
- 如果
-
返回结果:当
n变为1时,返回total_matches。
关键点
- 理解每轮比赛后队伍数的更新规则。
- 确保每轮比赛次数正确累加到
total_matches代码: def solution(n: int) -> int: total_matches = 0 while n > 1: if n % 2 == 0: # 偶数队伍数 total_matches += n // 2 n = n // 2 else: # 奇数队伍数 total_matches += (n - 1) // 2 n = (n - 1) // 2 + 1 return total_matches
if name == 'main': print(solution(7) == 6) print(solution(14) == 13) print(solution(1) == 0) 知识总结:
- 循环结构:
- 使用 `while` 循环来迭代处理每一轮的比赛,直到队伍数 `n` 变为1。
- 循环条件是 `n > 1`,确保在队伍数大于1时继续进行比赛。
-
条件判断:
- 使用
if-else语句来判断当前队伍数n是偶数还是奇数。 - 如果
n是偶数,执行偶数队伍数的处理逻辑。 - 如果
n是奇数,执行奇数队伍数的处理逻辑。
- 使用
-
整数除法和取模运算:
- 使用
n % 2 == 0来判断n是否为偶数。 - 使用
n // 2进行整数除法,得到下一轮的队伍数。 - 使用
(n - 1) // 2计算奇数队伍数时的比赛次数。
- 使用
-
变量更新:
- 在每轮比赛后,更新
total_matches以累加当前轮的比赛次数。 - 更新
n以反映下一轮的队伍数。
- 在每轮比赛后,更新
-
返回结果:
- 当
n变为1时,返回total_matches,表示总的比赛次数。
- 当
代码实现中的关键点
- 初始化:在函数开始时,初始化
total_matches为0。 - 循环处理:在
while循环中,根据n的奇偶性进行不同的处理,并更新total_matches和n。 - 返回结果:在循环结束后,返回
total_matches三、学习计划:
1. 每日任务
-
利用 AI 刷题软件进行 30 - 45 分钟的基础知识点专项刷题,例如选择题、填空题,重点关注教材中的核心概念、公式、定理等。
-
刷题结束后,仔细查看 AI 给出的错题分析,理解错误原因,将涉及到的知识点记录到错题本上,并结合教材和笔记进行复习强化。 2. 每周任务
-
周末安排 1 - 2 小时对本周的错题进行集中回顾,重新做一遍错题,检验是否已经掌握。同时,利用 AI 刷题软件的知识点总结功能,梳理本周所学的重点知识框架,查漏补缺。 四、工具应用 在线学习平台
-
CSDN:全球知名中文 IT 技术交流平台,有大量原创博客、精品问答、职业培训、技术论坛、资源下载等,可学习知识、交流探讨、归纳整理.
-
Gitee:基于 Git 的代码托管和研发协作平台,可存放代码,便于查阅和展示,还能增加求职认可度.
-
Coursera:提供 C 语言相关的课程,由专业讲师授课,课程内容系统,通常包含视频讲解、作业练习、项目实践等.