Python个人题解
嘛 拿了周赛第一 用python写的 所以来补一份python的题解
A题
原题链接:https://ac.nowcoder.com/acm/contest/119365/A
本题的题目非常友好,将判断逻辑写的很清楚。
整题使用if-elif-else结构完成。
代码如下:
n = int(input()) ''' 首先使用input获取输入的数据 用输入的数据定义变量n(也就是要判断的年数) 这里可以拆成两行: n = input() n = int(n) ''' if n % 400 == 0: print("yes") elif n % 4 == 0 and n % 100 != 0: print("yes") else: print("no") #这一段代码完全是翻译了题目描述,将是/不是闰年与输出yes或者no等价
B题
原题链接:https://ac.nowcoder.com/acm/contest/119365/B
本题使用python的解法非常简单:
print(" **") print(" **") print("************") print("************") print(" * *") print(" * *")
如果硬要说难点的话 大概是认清楚这个符号是* 以及数清楚空格的数量。
C题
原题链接:https://ac.nowcoder.com/acm/contest/119365/C
这题是签到题了。
a = int(input()) #邪修可以不写int(),反正没做运算orz print(a)
不过多解释啦,考验最基本的输入输出的运用。
D题
原题链接:https://ac.nowcoder.com/acm/contest/119365/D
同样是签到题。
考点硬要说的话是.split()的运用 (如何分割同一行内的输入)
还是直接贴出来代码啦
a,b = map(int,input().split()) ''' 这里map的作用是对a和b一起处理,如果不太能理解的可以将第一行换为以下三行: a,b = input().split() a = int(a) b = int(b) ''' print(a+b) #这里也可以定义其他变量为a+b,输出这个变量,随意就好
E题
原题链接:https://ac.nowcoder.com/acm/contest/119365/E
大概是重头戏了吧!
首先给不太熟悉代码的同学提供一个邪修的解决办法:
a = int(input()) #!!!看这里 注意 一定要加上int() 不然是过不去的!!! #输入里有脏东西orz(比如+5.0) if a == 1: print(1) elif a == 2: print(3) elif a == 3: print(9) elif a == 4: print(33) elif a == 5: print(153) elif a == 6: print(873) elif a == 7: print(5913) elif a == 8: print(46233) elif a == 9: print(409113) else: print(4037913)
这是枚举法 依照数据大小以及计算量来看 枚举法的做法对于本题其实是可以接受的。
接下来大概就是大家都很感兴趣的算法问题了。
先贴代码再解释:
n = int(input()) a = 0 b = 1 for i in range(1,n+1): #使用for循环进行遍历 从1到n 用n+1的意义是(1,n+1)的区间默认为左闭右开 b *= i #这里等价于b = b*i a += b #这里等价于a = a+b print(a)
是不是看完还一头雾水orz
这里来进行一个细致的讲解
首先理解一下for循环外的部分
a初始是0 是用来记录最终的和的
b初始是1 是逐个计算阶乘的
那么再来看里面
b = b*i 由于处于循环内 i会遍历每一个数 所以可以分别算出所有阶乘
a = a+b 将每一个阶乘都累加到变量a里
最后输出变量a
那么这题就完成啦
F题
原题链接 : https://ac.nowcoder.com/acm/contest/119365/F
主要考验审题和对转译符的运用
先贴代码:
print("printf(\"Hello, world!\\n\");")
具体到本题的话 是在引号和反斜杠前使用转译符
审题清晰的话还是不难的!
那么这期周赛的Python题解就到这里啦
谢谢您愿意看到这里orz