python学习记录:oj作答情况

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 想要知道一个经典问题:
给你两个数,请求出一个数的最大公约数

输入

输入两行,其中:

  1. 第一行一个正整数,表示 a
  2. 第二行一个正整数,表示 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())))

保存之前的代码的方法

这篇文章太长了,我再开一篇,未完待续

  • 42
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值