CCF-CSP认证 历年题目自练 Day1

CCF-CSP认证 刷题打卡 day1

声明:本人CCF-CSP认证系列都采用PYTHON的环境(本人数据科学与大数据专业PYTHON的掌握至关重要)有些描述性语言不够专业,读者多多包涵。(带有自己的理解较多)

试题编号: 201403-1
试题名称: 相反数
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。
输入格式
  第一行包含一个正整数 N。(1 ≤ N ≤ 500)。
  第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。
输出格式
  只输出一个整数,即这 N 个数中包含多少对相反数。
样例输入
5
1 2 3 -1 -2
样例输出
2

题目分析(个人理解):
此考试及其注重输入输出,不可多打print(),审题至关重要,读懂题目是第一步,我理解题目就比较费劲。
第一行包含一个正整数 N。(1 ≤ N ≤ 500)。
输入是正整数,数据类型为int
所以有n=int(input())
第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。
第一行输入的N决定了第二行输入的个数为N注意是空格分割。
(1)我想到的是将第二行的输入内容存进列表,用户输入的是string型的数据,包括空格。
(2)去除list中的空格,从list [0]开始遍历,如果存在-list[i]则计数1次,一直遍历到list[N-1]结束,然后输出我的计数即可。
(3)那么问题来了,如何去除空格?我首先想到的是正则表达式。
正则表达式的学习方法我是看菜鸟教程https://www.runoob.com/python/python-reg-expressions.html浅浅了解一下,发现不行,需要深入了解才能解决。(后续会出一期专门的正则表达式博客)。

b="i i o jj ij 1 123 %% $4 @ "
num2=re.sub("\s","",b)#用正则去除空格字符
print(num2)

但是注意,正则表达式针对的是string而不是list,但是我就想用正则做,OK!正则之后直接强制转换就OK。

import re
n=int(input())
l=str(input())
num2=list(re.sub("\s","",l))
#此时:
#输入-1是输出为['-','1']
for i in range(len(num2)):#为了方便后续遍历判断是否是相反数需要把输出为['-','1']转为['-1']

    if num2[i]=='-':
        num2[i]='-'+num2[i+1]
print(num2)

num3=[]#下面我们来去重复制
for x in num2:
    if x not in num3:
        num3.append(x)#直接判断是否存在在新的列表然后直接追加写入
print(num3)

num=0
for j in range(n):
	if '-'+(num3[j]) in l:#找到相反数
	    num+=1
print(int(num))

CCF-CSP认证 历年题目自练 Day1_第1张图片

(4)当然还可以使用第二种方法,使用split()函数将字符串中的空格拆开成多个字符串,并放入一个列表中返回。split()函数在没有指定的分割符号时,默认按空格拆封,其实在读到输入格式的时候就该想到用split()函数,(说明我的理论知识掌握的及不熟悉)。在此基础之上嘿嘿,我还有第三种方法不过感觉大同小异了。

n=int(input())
l=input().split()
num=0
for i in range(n):
	if '-'+(l[i]) in l:
	    num+=1
print(int(num))

(5)用map()函数去实现将字符转化为int类型,在后面遍历去比较的时候会简便很多,我认为是最优的解法。

n=int(input()) 
l=list(map(int,input().split()))
num=0
for i in range(n):
	if -(l[i]) in l:
		num+=1
print(int(num/2))

总结

本题目其实非常简单,个人认为关键在做题中提升自己,做题是提升能力的方式而不是目的,一道题让我复习了map()函数,split()函数,replace()函数(此题我没用但是看了一遍),还有list与string相互转换的方法。简单的题用多种方法去尝试无疑是一种练习的好方法。对于函数而言,我认为不仅要知道它的作用还要知道它针对的是什么数据类型。如果有时间还可以看看源代码,想想这个函数为什么能实现这样的功能。
CCF-CSP认证 历年题目自练 Day1_第2张图片
CCF-CSP认证 历年题目自练 Day1_第3张图片
CCF-CSP认证 历年题目自练 Day1_第4张图片

你可能感兴趣的:(CCF,CSP认证,python,学习方法)