1000: A+B Problem
题目描述
用来适应环境的题目,自然比较简单些。 计算2个整数的和。这两个整数都在1到1000之间。
输入
输入只有一行,包括2个整数a, b。之间用一个空格分开。
输出
输出只有一行(这意味着末尾有一个回车符号),包括1个整数。
必须用print()输出你的结果,才能通过OJ的评判
代码
a,b=input().split(" ")
print(int(a)+int(b))
问题:单行输入需要用split函数分割,int函数只能作用于字符
a, b = map(int, input().split()) print(a+b)
此外,上述式子是另一个解决方法,此方法采用了map函数,做法是对每一个输入数据进行int操作
map(function, iterable)
function:一个函数或方法
iterable:一个或多个序列(可迭代对象)
1001: Python 的 Hello World
题目描述
请在一行输出 "Python = Pile + sensensen"
输入
程序无输入
输出
按照题目要求输出
样例输出
Python = Pile + sensensen
代码:
print("Python = Pile + sensensen")
无难点
1002: Python 成绩
题目描述
森森最近学习了Python课,这门课程的总成绩计算方法是:总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50% (课程实际评分规则请以任课教师要求为准)
森森想知道,这门课程自己最终能得到多少分。
输入
输入文件只有1行,包含三个非负整数A、B、C,分别表示森森的作业成绩、小测成绩和期末考试成绩。
相邻两个数之间用一个空格隔开,三项成绩满分都是100分。
0 ≤ A、 B、 C ≤ 100 且 A、 B、 C 都是 10 的整数倍
输出
输出文件只有1行,包含一个整数,即森森这门课程的总成绩,满分也是100分。
样例输入
100 100 80
样例输出
90
代码:
a,b,c=map(int,input().split(" "))
print(int(a*0.2+b*0.3+c*0.5))
问题:因为得分均为十的倍数,故不存在什么四舍五入,浮点数转化为整数精度问题。
1003: eval() 函数的使用1
题目描述
Pile 学了 eval() 函数,感觉非常好用。所以,她也希望你能掌握这个技能。让我们开始吧。
输入
输入一行一个字符串,表示 eval() 函数所需要执行的语句。保证可以正常执行 eval() 函数。
输出
输出 eval() 函数执行的语句。
样例输入
print('hello')
样例输出
hello
代码:
eval(input())
问题:这个题目时让我们更深入的理解eval函数的用法:
可以将数字字符转化为整数,也可以执行输入的命令,总之是字符串当作Python代码执行,从而实现一些动态编程的需求。
1004: math 库的使用1
题目描述
森森在学专业课的时候,发现一个神奇的函数,叫 gamma 函数。
森森想知道 gamma 函数的值。
输入
输入一行一个正整数 n ,表示森森想要知道的函数值。
输出
输出一行一个浮点数,表示 gamma(n) 的值。
样例输入
4
样例输出
6.0
代码:
import math
n=int(input())
print(math.gamma(n))
没有问题
1005: 字符串存在判定
题目描述
Pile 想要知道,一个字符串在另一个字符串内是否存在。
输入
输入第一个字符串表示字符串 a;
第二行一个字符串 b
输出
输出 'True' 或者 'False' ,表示字符串是否存在。
样例输入
3 233
样例输出
True
代码:
a=input()
b=input()
if a in b or b in a:
print("True")
else:
print("False")
问题:python 里面字符串的有些算法比C语言要简单很多,比如上述判断字符串是否存在算法,只需要 a in b/b in a即可知道字符串是否存在。
1006: 回文串的判断
题目描述
Pile 想知道她构造的一个字符串是不是回文串,请你帮她判断一下吧。
回文串的定义是反向排列与原串相同。
输入
一行一个字符串,表示 Pile 提供给你的字符串。
输出
输出 'True' 表示输入的串是回文串;否则输出 'False' 。
样例输入
25252
样例输出
True
a=input()
n=len(a)
t=0
for i in range (n//2):
if a[i]!=a[n-1-i]:
t=1
if t==0:
print("True")
else:
print("False")
问题:一开始写的代码是这样的,用到了很多C语言中的代码思想,代码比较长。n//2结果是整型
n/2是浮点型
1007: 成绩分析
题目描述
森森的期末考试考完了,她想知道自己的成绩等级。
她的成绩与等级之间是这样转换的:
- 成绩在 90~100 分之间是 A;
- 成绩在 80~89 分之间是 B;
- 成绩在 70~79 分之间是 C;
- 成绩在 60~69 分之间是 D;
- 成绩在 0~59 分之间是 F。
请你根据她的成绩计算出她的等级。当然,她可能会输入一个错误的值,这时候请输出 "Error!" 。
输入
输入一行一个整数,表示森森的成绩
输出
输出一个字母或者 "Error!" 表示结果。
样例输入
100
样例输出
A
代码:
try:
score=int(input())
if 0<=score<60:
print("F")
elif 60<=score<70:
print("D")
elif 70<=score<80:
print("C")
elif 80<=score<90:
print("B")
elif 90<=score<=100:
print("A")
else:
print("Error!")
except:
print("Error!")
#最初想法
问题:
这个题真的是坑的我不轻,乍一看很简单的题目,实际上想麻烦了处处是坑。
思路复盘:
既然如果有可能输入一个错误的值,我们要考虑输入数据可能的错误类型,这个地方就是出问题的点,一旦没有考虑全就可能出错。先通过try-except解决了非数字输入问题,又通过int,解决了浮点数输入问题,最后通过严格限定范围,解决了负整数问题,总之,特别麻烦!!!
先限定是整数,在严格限定范围,不去考虑什么简便代码,解决这个问题就会很容易了!
真的是只有自己尝试过才知道代码为什么那么写,恍然大悟!
tru-except:判断的是下方代码的正确与否
输入数据错误判断!
1008: 最大公约数
题目描述
Pile 想要知道一个经典问题:
给你两个数,请求出一个数的最大公约数
输入
输入两行,其中:
- 第一行一个正整数,表示 a
- 第二行一个正整数,表示 b
输出
输出 a, b 的最大公约数
样例输入
16 32
样例输出
16
初始代码思想:
a=int(input())
b=int(input())
n=min(a,b)
while(n!=1):
if a%n==0 and b%n==0:
break
else:
n=n-1
print(n)
#这个代码虽然简单易懂,但是时间复杂度非常高,容易使时间超限,所以我们换个解法
不负责任的代码:(直接应用math库中的函数代码)
import math
a = int(input())
b = int(input())
z=math.gcd(a,b)
print(z)
优化代码:(讲一下gcd代码的原理)
【Math】最大公约数(gcd)_gcd最大公约数-CSDN博客
math标准库函数功能汇总_…mogu.|e…-CSDN博客
要考试了先放一下,等我有空回过头来再更简单易懂的描述T-T
问题:max,min函数,取数据之中的最小值或最大值,可以有多个数据输入,可以输入数字字符,但字符串不行。
gcd函数知道了吧!
1009: 输出偶数
题目描述
森森最喜欢偶数了。
请你帮她输出 从 1 到 n 的所有偶数~
输入
输入一行一个数,表示上文中的 n
输出
输出多行,保证一行有且只有一个偶数。
样例输入
10
样例输出
2 4 6 8 10
代码:
n=int(input())
for i in range(n):
if (i+1)%2==0:
print(i+1)
输入及输出数据的特点决定了这个代码并不难。
用不到.format()函数
1010: 计算均值
题目描述
Pile 想问你一个问题:
给你 n(1 <= n <= 10000)个整数,求它们的和与均值。
输入
输入第一行是一个整数n,表示有n个整数。
第2~n+1行每行包含1个整数。
输出
输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。
样例输入
4 344 222 343 222
样例输出
1131 282.75000
代码:
n=int(input())
sum=0
for i in range(n):
sum+=int(input())
print("{} {:.5f}".format(sum,sum/n))
问题:
.format 函数的用法很生疏!!!
先看槽的结构:(自己总结一遍加深印象)好好记!!!T-T
{(参数序号:一般没什么用,我们会手动把顺序调整到合适的):(格式控制标记:一共六种,麻烦且多)}
1:用于填充的字符,输出是有宽度的,我们一般都是用空格填充这些宽度,但是用*#...也挺好看
2.对齐:
<左对齐
>右对齐
^中心对齐(虽然是小的点,但是一旦考到就会懵掉,太容易忘记了)
3.宽度:设定的输出长度
4.,
没咋见过呢,这个是数字千分位的分隔符,12,354那种
5.精度
.5f 啥的,表示小数部分的精度或字符串的最大输出长度。。。
6.类型
对于整数类型有:
(2)b
(Unicode) c
(10)d
(8)o
(16小写) x
(16大写)X六种
浮点数:
e小写的指数形式,E大写的指数形式,f浮点数的标准形式,%浮点数的百分形式。
再看format后方是用逗号隔开的参数。
1011: 计算阶乘
题目描述
森森想知道 1! + 2! + ... + n!,请你帮她计算一下吧。
输入
输入一行一个整数 n, 表示上文的 n
输出
输出一个整数表示结果
样例输入
1
样例输出
1
n=int(input())
sum=0
m=1
for i in range(n):
m=m*(i+1)
sum+=m
print(sum)
思想:将n的阶乘保存,简化运算,非常流畅!
1012: 汇率兑换
题目描述
按照课本中温度转换程序的设计思路,按照 1美元 = 6人民币的汇率编写美元和人民币的双向兑换程序。
输入
输入一行字符串,表示人民币或者美元的数量。保证字符串的最后一位是 A-Z 的字母,其他位置均为数字。
- 人民币的最后一位一定是 'R' 或者 'r'
- 美元的最后一位一定是 'D' 或者 'd'
输出
输出转换后的结果。结果表示为一个字符串,前面输出一个整数,最后一位输出 "R" 或者 "D" 表示人民币或者美元。
如果不能转换,输出 "Error!"
样例输入
12R
样例输出
2D
代码:
try:
a=input()
if a[-1]=='R' or a[-1]=='r':
b=int(a[0:-1])//6
print(str(b)+'D')
elif a[-1]=='D' or a[-1]=='d':
b=int(a[0:-1])*6
print(str(b)+'R')
else:
print("Error!")
except:
print("Error!")
问题:
这个题的细节还是挺多的,比如使用try-except时,一旦try里面的代码没写好,结果就会一直是error,所以要重新检查。
注意:字符的比较中,不要忘记加''!!!(双引号括一串字符,单引号单个字符,我的浅薄理解)数字字符的转换通过str函数!!!
1013: 进度条的显示
题目描述
实现一个进度条函数,具体的实现方法可以与书上的代码以及对照进行实现。
输入
输入 scale 表示输出进度条的精度。
输出
输出整个执行过程。
样例输入
5
样例输出
------start------ 0 %[->..........] 20 %[**->........] 40 %[****->......] 60 %[******->....] 80 %[********->..] 100 %[**********->] ------end-----
这是一个比较有应用性的题目哦!当然,也是比较有难度的!
代码:
scale=int(input())
print("------start------")
for i in range(scale+1):
a,b='**'*i,'..'*(scale-i)
c=(i/scale)*100
print("{:>3.0f} %[{}->{}]".format(c,a,b))
print("------end-----")
但是其实和画图很像,把每一步每一步操作好,注意细节。
有些地方也给了我很多启发!3.0f/'**'*i/'..'*s-i......
很有意思的题目!没有调用time库,因为不需要动态展示
1014: 因子数
题目描述
森森非常喜欢数字4和7,看到一个数字她就想快速计算出因子里面分别有几个4和7,但是智商捉急的她总是要算很久,喜欢编程的你能够帮助她吗?
输入
第一行一个整数n,表示给定的数字。
输出
两个用空格隔开的数字,分别表示给定数字的因子中4和7的个数。
样例输入
112
样例输出
2 1
初始代码:
n=int(input())
f=0
s=0
while(n!=0):
if n%4==0:
f=f+1
n=n/4
continue
elif n%7==0:
s=s+1
n=n/7
continue
else:
break
print("{} {}".format(f,s))
可惜,这个不对!!原因是想错了!!题目的意思是分别求解因字数T_T
正确代码:
n=int(input())
f=0
s=0
n1=n
n2=n
while(n1!=0):
if n1%4==0:
f=f+1
n1=n1//4
continue
else:
break
while(n2!=0):
if n2%7==0:
s=s+1
n2=n2//7
continue
else:
break
print("{} {}".format(f,s))
而且一定要用双除号去除!!!否则结果会是浮点数导致不精确?(不是很理解,既然取余为零又有什么区别?)
注意:在Python2中//
和int()
都是向下取整;
问题:
这个题当时纠结了好久,因为没看明白这个题的意思,试了好几种理解一直不对。
1015: 文章检测
题目描述
给你一篇英文文章,请问你里面有多少个空格、数字字符、英文字母和其他字母。
输入
输入多行文字,以 EOF 结束
每一行表示一个文章的段落went
输出
输出一行提示信息,具体格式见样例。
样例输入
Python is a good language. We all like it.
样例输出
7 spaces, 0 numbers, 32 letters, 3 other characters.
代码:
stopword = ''
stri = ''
try:
for line in iter(input, stopword):
stri += line + '\n'
except EOFError:
pass
stri = stri[0:-1]
space=0
number=0
letter=0
other=0
for i in stri:
if i==' ':
space=space+1
elif '0'<=i<='9':
number=number+1
elif 'a'<=i<='z' or 'A'<=i<='Z':
letter=letter+1
else:
other=other+1
print("{} spaces, {} numbers, {} letters, {} other characters.".format(space,number,letter,other))
问题:
EOF结束条件出现了!这个应用于多行文字,将多行文字作为单个输入,回车符不再表示结束。
stopword = ''
stri = ''
try:
for line in iter(input, stopword):
stri += line + '\n'
except EOFError:
pass
stri = stri[0:-1]
# do something...
1016: eval() 函数的使用2
题目描述
森森希望多了解一下 eval() 函数,于是她给你了几个定义:
x = 12, y = 14
她希望你能计算她的表达式。
她可能需要使用 math 库来保证表达式的正常执行。
输入
输入一行字符串表示 x 和 y 的表达式
输出
输出一行一个数,表示字符串的值
样例输入
x + y
样例输出
26
代码:
import math
x=12
y=14
print(eval(input()))
没有难度,别忘了import math库
1017: 质数的和与积
题目描述
Pile 想知道一个简单的问题:
两个质数的和是S,它们的积最大是多少?
输入
一个不大于10000的正整数S,为两个质数的和。
输出
一个整数,为两个质数的最大乘积。数据保证有解
样例输入
50
样例输出
589
根据所学的数学知识可知,二者相等时最大,向两侧依次减小,这可以是一个关键点。
代码:
def Pn(n):
t=1
for i in range(2,n//2):
if n%i==0:
t=0
return t
n=int(input())
i=n//2
while(i!=0):
if Pn(i)==1 and Pn(n-i)==1:
print(i*(n-i))
break
i=i-1
这个判断素数的算法是最简单的那种,时间复杂度比较高,注意range从2开始呦!
还有一种从2到算数平方根+1的整数形式迭代,这种时间复杂度就会少很多了!
优化代码:
import math
def Pn(n):
t=1
s=int(math.sqrt(n))
for i in range(2,s+1):
if n%i==0:
t=0
return t
n=int(input())
i=n//2
while(i!=0):
if Pn(i)==1 and Pn(n-i)==1:
print(i*(n-i))
break
i=i-1
问题:不要直接对n进行操作,这是由于C语言和python语言的差异导致的,python二者相等是指地址相同,对任意一个进行操作时都会改变它原本的结果,导致出错(和后边代码也有一定关系),而C语言仅仅是赋值。
1018: 寻找多数元素
题目描述
森森在学习列表的时候,发现一道经典的题目:在一个序列中寻找多数元素。
她给你了一道简化版的问题:
询问你这个序列里面出现次数最多的元素的出现次数。
输入
输入多行,一行一个数表示序列里面的每一个数。
注:使用
try:
except EOFError:
来判断什么时候结束输入
输出
输出一行,表示出现次数最多的数字的出现次数。
样例输入
12 13 14 12
样例输出
2
代码:
list=[]
while(1):
try:
list.append(input())
except EOFError:
break
dp={}
for key in list:
if key in dp:
dp[key]=dp[key]+1
else:
dp[key]=1
print(max(dp.values()))
这个题目是有一定难度的,比如解决未知数量元素输入问题的方法,元素储存思想,字典的使用等等。先将元素储存在列表中,列表灵活性大,存储方便,非常好用,列表元素输入采用append函数,try-except的使用,字典的存取......
1019: 判断素数
题目描述
Pile 想实现一个判断素数的函数。当这个数是素数的时候输出 'True' ,不是素数输出 'False' 。
但是她是一个粗心的孩子,她有时候会输入一些奇怪的字符串,这个时候你需要输出 'invalid'。
输入
输入一行一个字符串表示 Pile 的输入。
输出
对于输入,输出一行字符串 'True' 'False' 或者 'invalid' 表示结果。
样例输入
2
样例输出
True
代码:(优化算法)
import math
try:
n=int(input())
m=int(math.sqrt(n))
t=1
for i in range(2,m+1):
if n%i==0:
t=0
if t==1:
print("True")
else:
print("False")
except :
print("invalid")
为什么加上
TypeError
ValueError就不对了???优先用except吧!
1020: 所有参数的乘积
题目描述
森森想要写一个返回多个参数的乘积函数。你需要这样调用:
#!/usr/bin/python3 print(eval(input()))
输入
输入一行表示字符串,保证字符串的格式为:
multi(参数列表)
其中参数列表中每个数以逗号分隔。
保证至少有一个参数。
输出
如果输入的参数均可以参与乘法运算,输出乘积;
否则输出第一个不合法的参数,形式为 :
Invalid arg x
x 表示第 x 个参数不合法
样例输入
multi(1,2)
样例输出
2
这个题目很有难度哇,考察到了函数的定义以及字符串的处理等一系列问题。
代码:
def multi(*n):
m=0
mul=1
try:
for i in n:
m+=1
i=i+1-1
mul*=i
return mul
except TypeError:
return ('Invalid arg %d'%m)
print(eval(input()))
花了很长时间才把这个题目完全搞定(脑壳痛)【难题】
问题总结:
一开始我并没有想到自定义函数,但是很显然不自定义函数就无法进行下一步。
有一个思维惯性在print(eval(input()))这里,eval也就是说,我们输入的一定是整数,数字,而不再是字符。而print告诉我们我们需要返回值,而非直接print。
1021: 到底怎么样才能写好 Python?
题目描述
Pile 想知道,到底怎么样才能写好 Python?你需要输出一篇 Tim Peters 的文章来告诉 Pile。
输入
程序无输入。
输出
输出题目所要求的文章。
样例输入
无
Python之禅
代码:
import this
1022: CSV 文件解析(有关CSV文件的一向觉得很难)
题目描述
森森喜欢将 CSV 文件打开看看,但是当她看到的文件里面都有好多逗号的时候,她觉得很不舒服。
她需要你去把一个 CSV 文件的逗号去掉并换成 \t 。
请你帮帮她吧。
输入
输入多行,表示一个 CSV 文件。
输出
输出多行,表示你的输出。注意逗号都需要换成 \t 。
样例输入
city, a, b, c bj, 1, 2, 3 xa, 2, 3, 4 gz, 3, 4, 5 cq, 1, 2, 2
样例输出
city a b c bj 1 2 3 xa 2 3 4 gz 3 4 5 cq 1 2 2
代码:
1023: 重复元素的判定
题目描述
Pile 想知道一个集合里面有没有重复元素,请你帮帮她吧。
输入
输入第一行表示元素的个数 N。
以下 N 行,每行一个数字。
输出
如果有重复元素,请输出两行:第一行"True" ;第二行,输出一个数,表示是第几个元素重复。如果有多个重复的,请输出重复元素中编号最小的; (注:这里重复元素中编号最小的指从第2个重复的元素开始算,如1 2 2则输出第二个2所在的位置3,1 3 4 3输出4,1 3 4 5 3 3输出5,依次类推。)
否则,输出一行 "False" 表示没有元素重复。
样例输入
12 1 2 3 4 5 6 7 8 9 10 10 12
样例输出
True
11
n=int(input())
a=[]
for i in range(n):
a.append(input())
dp={}
t=0
for i in range(len(a)):
if a[i] in dp:
dp[a[i]]=i
break
else:
dp[a[i]]=-1
for i in a:
if 0<=dp[i]:
t=1
print("True")
print(dp[i]+1)
break
if t==0:
print("False")
1024: 计算集合的并
题目描述
森森喜欢求两个集合的并,请你帮她求一下吧。
输入
输入两行,每行表示一个集合,每个集合的元素(均为数字)以一个空格分隔
输出
输出一行表示集合。
样例输入
1 2 3 4 5 6 7 2 8 9 18 28
样例输出
{1, 2, 3, 4, 5, 6, 7, 8, 9, 18, 28}
a=set(map(int,input().split(" ")))
b=set(map(int,input().split(" ")))
a=a|b
print(a)
本题考查了集合的建立以及map函数的使用
利用map函数我们可以将列表转化为数字并且按顺序排列,利用set函数建立集合,方便后续集合的用法,求并集。
1025: 计算标准差
题目描述
Pile 想知道好多个数字的标准差。
输入
输入多行,每行表示一个整数
输出
输出标准差,输出格式可以参考样例。
输出的标准差要求利用科学计数法表示,且只能输出 2 位数,例如 1.2e+09。
样例输入
1 2 3 4 5 6
样例输出
dev = 1.9.
import math
def mean(numbers):
sum=0
for i in numbers:
sum+=i
return sum/len(numbers)
def dev(numbers,m):
t=0
for i in numbers:
t+=(i-m)**2
n=len(numbers)
return math.sqrt(t/(n-1))
list=[]
while(1):
try:
num=int(input())
list.append(num)
except:
break
n=list
m=mean(list)
print("dev = {:.2}.".format(dev(n,m)))
关键点:
标准差是n-1!!!!还有就是要注意细节了!
1026: 键值查询
题目描述
给你一个集合,请你输出我想要知道的键所对应的值。
输入
输入第一行表示一个集合。
第二行表示我想要知道的键
输出
输出一个值,表示结果。
样例输入
{"1": "2", "3": "4"} 1
样例输出
2
dp={}
dp=eval(input())
print(dp[input()])
dp[]——这样调用!
记住哦!
1027: 月份输出
题目描述
Pile 想知道月份的英文表示。她会输入一个月份,请你输出对应的表示。
每个月份用三个英文字母表示,且第一个字母是大写,后面两个是小写。
输入
输入一行一个整数,表示月份的数字。
输出
输出一行一个字符串表示月份。
字符串长度一定是 3 。
样例输入
12
样例输出
Dev
dic={'1':"Jan",'2':"Feb",'3':"Mar",'4':"Apr",'5':"May",'6':"Jun",'7':"Jul",'8':"Aug",'9':"Sep",'10':"Oct",'11':"Nov",'12':"Dec"}
n=input()
print(dic[n])
利用字典,更加简便!
1028: 字符串进制转换
题目描述
请你将一个 10 进制的整数字符串转换成 16 进制。
输入
输入一行字符串,表示一个 10 进制。
输出
输出一个字符串,表示转换的结果
样例输入
1
样例输出
0x1
n=int(input())
if 0<=n:
print("0x{:x}".format(n))
else:
print("-0x{:x}".format(abs(n)))
以上是我的代码,我觉得并不严谨但是做出来了,利用的是输出字符的进制转换
此外还可以利用hex函数解决问题
print(hex(int(input())))
更加严谨和简单,可是必须了解hex函数
1030: 集合的交
题目描述
森森森喜欢求两个集合的交,请你帮她求一下吧。
输入
输入两行,每行表示一个集合,每个集合的元素(均为数字)以一个空格分隔。
输出
输出一行表示集合。
样例输入
1 2 3 4 5 6 7 2 8 9 18 28
样例输出
{2}
a=set(map(int,input().split(" ")))
b=set(map(int,input().split(" ")))
a=a&b
print(a)
集合的运算种类太丰富了,赞!
1031: 小型登陆系统
题目描述
给用户三次输入用户名和密码的机会,要求如下:
1)如输入第一行输入用户名为 'Pile' ,第二行输入密码为 'MAKIKAWAYI',输出 'SUCCESS',退出程序;
2)当一共有3次输入用户名或密码不正确输出 'FAILED'。
输入
输入最多 6 行。
每两行表示一组测试数据,其中第一行表示账号,第二行表示密码。
保证最后一定能输出结果。
输出
输出一行 'SUCCESS' 或者 'FAILED' ,表示登录成功或者失败。
样例输入
sensensen areyouok doyouknow you are bes
样例输出
FAILED
a="Pile"
b="MAKIKAWAYI"
t=0
for i in range(3):
c=input()
d=input()
if a==c and b==d:
t=1
break
if t==1:
print("SUCCESS")
else:
print("FAILED")
看明白题意就会很简单了
1032: 密码
题目描述
在上一题里, Pile 设置的密码是 'MAKIKAWAYI' ,森森森觉得这个密码过于简单,于是告诉 Pile,怎么样设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于 8 ,且不要超过 16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;
然而规则太多了,森森森也有点搞晕了。于是她给你一个密码,她想问你这个密码是不是安全的。
输入
输入数据第一行包含一个数 M (M ≤ 50) ,接下有 M 行,每行一个密码(长度最大可能为 50 ),密码仅包括上面的四类字符。
输出
对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出 YES ,否则输出 NO
样例输入
3 a1b2c3d4 Linle@ACM ^~^@^@!%
样例输出
NO YES NO
m=int(input())
def pan(n):
t1=0
t2=0
t3=0
t4=0
if 8<=len(n)<=16:
for i in n:
if 'a'<=i<='z':
t1=1
elif 'A'<=i<='Z':
t2=1
elif '0'<=i<='9':
t3=1
else:
t4=1
t=t1+t2+t3+t4
if 3<=t:
return 1
else:
return 0
else:
return 0
for i in range(m):
n=input()
if pan(n)==1:
print("YES")
else:
print("NO")
虽然很笨但至少做出来了呀
1033: 斐波那契数列Fibonacci问题
题目描述
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
现在请你编程计算一下这个数列
已知 f(0) = f(1) = 1, f(n) = f(n - 1) + f(n - 2) (n ≥ 2)。
现在给定一个数 n, 请求出 f(n) 。
输入
输入第一行包含一个正整数 T, 表示数据的组数。
之后 T 行,每行一个正整数 n 。
保证 1 ≤ T ≤ 1000, 1 ≤ n ≤ 40。
此题如果超时可以看看提示信息
输出
对于每个输入,输出一行一个数,表示 f(n)。
样例输入
4 1 2 3 4
样例输出
1 2 3 5
这个题目的难点是尽可能采用时间复杂度较低的方法:
def f(n):
if n==0 or n==1:
return 1
if 2<=n:
return f(n-1)+f(n-2)
n=int(input())
for i in range(n):
a=int(input())
print(f(a))
这是常规采用的方法,时间复杂度高,需要优化。
index=[1,1]
def f(x):
try:
return index[x]
except:
index.append(f(x-1)+f(x-2))
return index[x]
T=int(input())
for i in range(T):
print(f(int(input())))
保存之前的代码的方法
这篇文章太长了,我再开一篇,未完待续