洛谷 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
Comments | NOTHING