洛谷刷题笔记 B2001-B2020(python)

这里记录的是python的解法,并选几个当时比较棘手的记录下来。

B2001 入门测试题目

求两个整数之和,输入用空格隔开。在这里插入图片描述

使用 python 的习惯是输入之后使用回车再输入,这里的要求是一行,使用空格隔开
input()输入的是字符串,我们可以借助.split() 方法将字符串分割转换为为列表,再用map()函数进行类型转换并依次赋值

a,b = map(int,input().split())
print(a+b)

KR:python 空格间隔的输入。

B2004 对齐输出

右对齐输出,。在这里插入图片描述

使用 python 的格式化输出占位符设置好 8 个宽度,一般语言都 默认右对齐(左对齐加个短横:-%d),按照思路代码如下:

'''方案一:'''
a,b,c = map(int,input().split())
print("%8d %8d %8d"%(a,b,c))
'''方案二:'''
a,b,c = map(int,input().split())
print("{:8d} {:8d} {:8d}".format(a,b,c))

Python 从2.6版本开始新增格式化字符串的函数 str.format()

KR:python 的格式化输出。

B2005 字符三角形

打印字符三角形。在这里插入图片描述

如果是把结果挨个打印输出,这显然是没有必要做笔记的。我们往往采用的是循环结构
需要对每一行输出结果分析计算一下,也就是计算等差数列。使用 python 的print() 结尾默认换行,因此需要传参end=""更改一下。
此外,python 还可以通过字符串的乘法以输出更多的字符。
代码如下:

'''方案一:'''
base,height= 5,3 #可根据情况灵活更改
a = input()
for i in range(height):    
    for m in range(height-1-i):    # 每行空格数 == 循环次数
        print(" ",end = "")
    for n in range(2*i+1):    # 每行字符数 == 循环次数
        print(a,end = "")
    print()    #一层(行)结束,换行

'''方案二'''
base,height= 5,3 #可根据情况灵活更改
a = input()
for i in range(height):    
    print(" "*(height-i-1),end="")  # 每行空格数
    print(a*(2*i+1),end="")    # 每行字符数
    print()

注意“计算机”的习惯:
1.范围从0开始
2.区间左闭右开。

B2012 甲流疫情死亡率

在这里插入图片描述

python 输出百分号采用%% 占位符,此外,百分数部分时小数的100倍。

num_cfm = int(input())
deaths = int(input())
print("%.3f%%"%(deaths/num_cfm*100))

关于ASCII 码的转换

python 使用函数进行转换。

print("%d"%ord(input().strip())) #字符转数字 
print(chr(int(input())).strip()) #数字转字符

使用 strip() 是为了去出前后存在的空格,(可能因为python的变量存储方式比较特殊,从而导致编译结果不一致)

B2020 分糖果

在这里插入图片描述

题中的分配方法一直重复,因此考虑使用循环结构
为了方便对大量数据的操作,考虑使用序列结构(这里使用列表),而在使用数组或列表时,需要考虑越界的情况。
变量更新使用赋值运算符时,要时刻注意变量的变化,以调整代码的先后顺序。

# 以列表的的形式存储输入值
info = list(map(int,input().split()))
sum = 0
#分配过程
for i in range(len(info)):
    sum += info[i] % 3
    info[i] = info[i]//3
    info[i-len(info)+1] += info[i]
    info[i-1] += info[i]
for i in info:
    print(i,end=" ")
print()
print(sum)

KR:列表(数组)越界问题


下文待续。。。

猜你喜欢

转载自blog.csdn.net/m0_67313306/article/details/124889074