今天更新一下Chapter2练习题中的问题:
第一题
根据这道题,以及提供的代码模板,我们可以把代码写成:
import ast
n = ast.literal_eval(input())
# 在这行注释下面,编写代码,输出你的答案
# 利用数学公式计算总台球数
total_balls = n * (n + 1) // 2
print(total_balls)
详细分析一下代码意义:
Total_balls = n * (n + 1) // 2: 此行使用算术级数之和的公式计算台球总数。 公式为n * (n + 1) // 2,表示前n个正整数之和。
n:行数。
(n + 1):n 之后的下一个数字。
n * (n + 1):n 与下一个数字的乘积。
n * (n + 1) // 2:乘积除以2所得的和(算术级数公式中的重复计算和)。
print(total_balls):该行打印计算出的台球总数。
总之,这个代码无需使用循环、递归或其他复杂结构,它其实依赖一个简单的数学公式,这个公式利用了算术级数的特性。
第二题
import ast
eggs = ast.literal_eval(input())
# 在这行注释下面,编写代码
min_boxes = eggs // 12 + (1 if eggs % 12 != 0 else 0)
print(min_boxes)
详细分析一下代码意义:
min_cartons = (eggs + 11) // 12: 此行计算存储给定数量的鸡蛋所需的最小鸡蛋盒数量。 公式 (鸡蛋 + 11) // 12 确保将剩余的鸡蛋装入完整的纸箱后,计入另一个纸箱中。 鸡蛋总数加 11,然后除以 12。
print(min_boxes):该行打印计算出的鸡蛋盒的最小数量。
第三题
n, k = map(int, input().split(','))
kth_digit = n // 10 ** k % 10
print(kth_digit)
详细分析一下代码意义:
kth_digit = n // 10 * * k % 10: 此行计算数字 n 中从右边算起的第 k 位数字。
10**k:10 的 k 次方。
n // 10**k:n 除以 10 的 k 次方的整数。 这有效地删除了最后 k 位数字。
% 10:除以 10 取余数,得到右数第 k 位。
print(kth_digit):该行打印计算出的第 k 位数字。
第四题
import ast
import math
n = ast.literal_eval(input())
x = (-1 + ( 1 + 8 * n) ** (1/2)) / 2
print(math.ceil(x))
根据题目要求,我们了解到3行最多包含6个台球,那画个图大概就是
。
。。
。。。
。。。。
。。。。。
。。。。。。
。。。。。。。
。。。。。。。。
按照上面的图,我们可以分析出来,每一行都是比前面一行要多出一个球,根据找规律,我们可以明白
x = (-1 + (1 + 8 * n) * * (1/2) ) / 2 代表的就是台球的总行数
第五题
import ast
n = ast.literal_eval(input())
total_balls = sum(range(1, n + 1))
print(total_balls)
其实这道题跟上面的解题思路是一样的,只是公式比上面的要简单一些,因此
total_balls = sum (range (1, n+1)) 计算出来的就是总共的数量。
本人只是计算机系小白一只,做这个笔记只是记录在做题的过程中学习到的知识,看看每天进步的一点点!
所有题目版权由DataWhale管理,请勿擅自挪用,谢谢配合!