2022年1月10日 python练习

Posted on 2022-01-10  67 Views


洛谷 P1554 梦中的统计

在这里插入图片描述很简单的统计,遍历每个数然后取出每一位,使统计数组对应位置+1即可

a,b = map(int,input().split())
statistical = [0 for _ in range(10)]
for i in range(a,b+1):
    while i != 0:
        statistical[i%10] += 1
        i = i // 10
for i in statistical:
    print(i,end=" ")

洛谷 P2141 [NOIP2014 普及组] 珠心算测验

在这里插入图片描述
这个题有点小陷阱,于是我就完美的踩了进去
一开始我写的代码是这样的

n = int(input())
count = 0
problem_num = list(map(int,input().split()))
problem_num.sort()
for i in range(len(problem_num)):
    for j in range(i+1,len(problem_num)):
        if problem_num[i] + problem_num[j] in problem_num:
            count += 1
print(count)

嗯,思路很简单,遍历出所有加法组合,检查结果是否在给的数组中,在就使结果加一,看上去好像没啥问题,但实际上问题很大,因为很可能给定数组中有多个加法式子结果相同,这就会使答案出现错误,所以还要有一个去重的过程
于是写成下面这样

n = int(input())
problem_num = list(map(int,input().split()))
temp = []
for i in range(len(problem_num)):
    for j in range(i+1,len(problem_num)):
        t = problem_num[i] + problem_num[j]
        if t in problem_num:
            if t not in temp:
                temp.append(t)
print(len(temp))

当然,其实还可以这么写,g用来统计在给定序列里出现过的数,t用来统计求和得到的数,如果在t中且在g中,则满足条件

n = int(input())
ans = 0
a = [0 for i in range(n)]
t = [0 for i in range(20005)]
g = [0 for i in range(20005)]
q = 0
for i in input().split():
    a[q] = int(i)
    g[a[q]] += 1
    q+=1

for i in range(n):
    for j in range(i+1,n):
        t[a[i]+a[j]] += 1

for i in range(20005):
    if t[i] > 0 and g[i]:
        ans += 1
print(ans)

洛谷 P2911 [USACO08OCT]Bovine Bones

在这里插入图片描述

题目很简单,直接模拟遍历即可

a,b,c = map(int,input().split())
t = [0 for _ in range(20*20*40+5)]
for i in range(1,a+1):
    for j in range(1,b+1):
        for k in range(1,c+1):
            t[i+j+k] += 1
max_t = max(t)
for i in range(len(t)):
    if t[i] == max_t:
        print(i)
        break

欢迎来到parafish的个人博客,这里是一个正在努力的ctfer

路虽远,行则必至