蓝桥杯题目 19733 封闭图形个数
最初思路:
因为涉及原值和计算后数值的排序,所以我想到的是二维数组,首先采用列表表达式,初始化一个二维数组[ [0]*2 for i in range(n) ],之后进行赋值和计算,最终利用列表排序函数sort进行排序,a.sort(key = lambda x:(x[1],x[0])
我的代码:
def algorithm(n):
m = str(n)
cnt = 0
for i in range(len(m)):
if m[i]=='0' or m[i]=='4' or m[i]=='6' or m[i]=='9':
cnt+=1
elif m[i]=='8':
cnt+=2
return cnt
n = int(input())
a = [ [0]*2 for _ in range(n) ]
b = list(map(int,input().split()))
for i in range(n):
a[i][0] = b[i]
a[i][1] = algorithm(b[i])
a.sort(key=lambda x:(x[1],x[0]))
for i in range(n):
print(a[i][0],end=' ')
网友代码
n = int(input())
N = list(map(str, input().split()))
A = ['1','2','3','5','7']
B = ['0','4','6','9']
C = ['8']
def var(x):
s = 0
for i in x:
if i in B:
s += 1
if i in C:
s += 2
return s, int(x) # 这里是因为规则中还有 s1 = s2 时,比较 x1 和 x2
N.sort(key = var)
print(*N) # *是拆开列表, 把元素按空格间隔的输出
学习心得
sort函数的运用
可以先利用函数计算,再将需要的值返回回去,这样就可以简化不必需要的赋值操作
解包的运用
对于上述的要求格式,利用解包输出更方便一点,就不需要循环输出了。
A = ['1','2','3','5','7']
print(*A)
输出结果
1 2 3 5 7