1.题目1:输入A、B,输出A+B。
#input: 12 45
#output:57
c = input().split() #将输入以空格为分隔符返回一个字符串列表
a,b = map(int,c)
sum1 = a + b
print(sum1)
求和
2.题目2:求1+2+3+...+n的值。
#input:4
#output:10
print(sum(range(1,int(input()) + 1)))
求和
3.题目3:给定圆的半径r,求圆的面积。
#input:4
#output:50.2654825
import math
print(round(math.pi*float(input())**2,7))
求圆的面积
4.题目4:
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
#input:10
#output:55
import numpy as np
n = int(input())
a = np.zeros((1,n),dtype = "int")
a[0][0] = 1
for i in range(1,n):
a[0][i] = a[0][i-1] + a[0][i-2]
print(a[0][n-1]%10007)
'''
def fei(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fei(n-1)%10007 + fei (n-2)%10007
n = int(input())#项数
print(fei(n))
'''
Fibonacci
5.题目5:
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
1. 年份是4的倍数而不是100的倍数;
2. 年份是400的倍数。
其他的年份都不是闰年。
#input:2013
#output:no
year = int(input())
if (year>=1990 and year<=2050) and (year%400 == 0 or (year%4 == 0 and year%100 !=0)):
print("yes")
elif year<1990 or year>2050:
print("输入错误")
else:
print("no")
闰年判断
6.题目6:
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
for i in range(32):
print("{:05b}".format(i,'b'))
5位2进制
7.题目7:
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
#input:5 7
#output:
'''
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
'''
m, n = map(int, input().split())
letters = ''
# 1.产生所有字母
for i in range(26):
letters += chr(ord("A") + i)
# 2. 产生第一行代码
x = letters[:n]
for i in range(1,m+1):
try:
print(x)
x = letters[i] + x[0:n-1]
except:
pass
'''
try:
n, m = map(int, input().split())
letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
x = letter[:m]
for i in range(1, n + 1):
print(x)
x = letter[i] + x[0:-1]
except:
pass
#本文版权归作者和博客园共有,来源网址: 欢迎各位转载,
#未经作者本人同意转载文章时,必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!
'''
'''
import numpy as np
m,n = map(int,input().split())
#输入原始矩阵
mx = np.ones((m,n),dtype="str")
print(mx)
#产生所有字母的列表
letters = []
for i in range(26):
letters.append(chr(ord("A") + i))
# print(ord("A"))#65 某个字符串对应的ascii码;chr ascii码转字符串
'''
字母图形
8.题目8:
给出n个数,找出这n个数的最大值,最小值,和。
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
#input:5
# 1 3 -2 4 5
#output:
#5
#-2
#11
# 给出n个数,找出这n个数的最大值,最小值,和。
n = int(input()) #几个数
a = input().split() #注意不能直接将列表转换类型
a = [int(i) for i in a]
#>>> input().split()
#4 5 6
#['4', '5', '6']
#>>>
print(max(a))
print(min(a))
print(sum(a))
数列特征
9.题目9:
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
#input:
#6
#1 9 4 8 3 9
#9
#output:
#2
n = int(input()) # 几个数
a = input().split()
a = [int(i) for i in a] # 输入的列表
b = int(input()) # 待查找的数
try:
print(a.index(b) + 1) #待查找数的下标,加一代表位置
except:
print(-1)
列表查找
10.题目10:
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
杨辉三角:给定一个数n,判断n第一次出现是在杨辉三角数字的第几个(杨辉三角3)?
#input:4
#output:
#1
#1 1
#1 2 1
#1 3 3 1
#思想:列表相加 + 观察
n = int(input())
def yanghui(p):
p = [1] + [p[i] + p[i+1] for i in range(len(p) - 1)] + [1]
return p
#1.将每一行输出一个列表
p = [1]
#print(p)
p_s = []
for i in range(n):
p_s.append(p)
p = yanghui(p)
#p.append(0) #增加一个元素,因为下一行比上一行多一个,#不用了,上面p迭代呢
#print(p)
#2.输出
for i in p_s:
#print(i)
#将列表元素这样输出:1 3 3 1
for j in i:
print(j,end=' ')
print("\t") #回车不换行
杨辉三角
#关键:后面一行除了前面和后面的1,中间的数是前面一行数的滑动两个数的和
#1.产生杨辉三角
n = int(input())
begin = [[1],[1,1]]
for i in range(n-2):#因为前面两个要加的数字是空的
newend = begin[-1]
new = [1]
new = new + [newend[j]+newend[j+1] for j in range(len(newend) - 1)] + [1]
begin.append(new)
a = str(begin)[1:-1]
#2.格式化字符串
import re
b = re.split(r'], ',a) # 分开每一个
c = [i + ']' for i in b[:]] # 加右括号
d = [] #将[]都去掉,之后将,转换为空格
for i in range(len(c)):
if i == len(c)-1:
e = c[i][1:-2]
else:
e = c[i][1:-1]
f = e.replace(',',' ') # str.replace(old, new[, max])
d.append(f)
#print(d)
#3.输出
h = n + 2*(n -1) #最后一行的长度
for i in d:
s = ' '*((h-len(i))//2)
print(s + i + s)
'''
#3.输出(最后一行是n + n-1个长度)
h = n + 2*(n -1)
for i in d:
print('{:^hs}'.format(i))
#精度保存时候是不能作为变量修改的
'''
杨辉三角2
n = int(input())
begin = [[1],[1,1]]
begin_last = [1,1]
index = 2
sum_index = 1 + 2
if n == 1:
print(1)
else:
while(n not in begin_last):
new_end = begin_last
new = [1,] + [new_end[j] + new_end[j+1] for j in range(len(new_end) -1)] + [1,]
begin_last = new
index += 1
sum_index += index
print(sum_index - index + new.index(n) + 1)
杨辉三角3
11.题目11:
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。
#按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。
#153是一个非常特殊的数,它等于它的每位数字的立方和,
#即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。
for i in range(100,1000):
gewei = i%10
shiwei = (i//10)%10
baiwei = (i//100)%10
if i == gewei**3 + shiwei**3 + baiwei**3:
print(i)
特殊数字
12.题目12:
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
#按从小到大的顺序输出满足条件的四位十进制数。
for i in range(10000):
gewei = i%10
shiwei = (i//10)%10
baiwei = (i//100)%10
qianwei = (i//1000)%10
if qianwei == 0:
continue
elif gewei == qianwei and shiwei == baiwei:
print(i)
回文数
13.题目13:
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入一行,包含一个正整数n。
按从小到大的顺序输出满足条件的整数,每个整数占一行。
#input:52
#output:
#899998
#989989
#998899
num1 = int(input())
for i in range(10000,999999):
gewei = i%10
shiwei = (i//10)%10
baiwei = (i//100)%10
qianwei = (i//1000)%10
wanwei = (i//10000)%10
shiwanwei = (i//100000)%10
sum1 = gewei + shiwei + baiwei + qianwei + wanwei + shiwanwei
tiaojian1 = (shiwanwei==0 and wanwei==gewei and shiwei==qianwei and num1==sum1)#5位数
tiaojian2 = (shiwanwei==gewei and shiwei==wanwei and baiwei==qianwei and num1==sum1)#6位数
if tiaojian1 or tiaojian2:
print(i,end=" ")
print("\t")
特殊回文数
14.题目14:
(1)给出一个非负整数,将它表示成十六进制的形式。
(2)从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
(3)给定n个十六进制正整数,输出它们对应的八进制数。
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出n行,每行为输入对应的八进制正整数。
#给出一个非负整数,将它表示成十六进制的形式。
#10进制转16进制:hex(n) 将10进制整数转换成16进制,以字符串形式表示。
#10进制转8进制oct(n)
#10进制转二进制:bin(n)
#8进制转16进制:hex(int(n,8))
#8进制转换成10进制:int(n,8)
#8进制转换成2进制:bin(int(n,8))
#2进制转换成16进制:hex(int(n,2))
#2进制转换成8进制:oct(int(n,2))
#2进制转换成10进制:int(n,2)
#30 1E 10进制转16进制
#n = int(input())
#s = hex(n)[2:]
#print(s.upper())
'''
str = "www.runoob.com"
print(str.upper()) # 把所有字符中的小写字母转换成大写字母
print(str.lower()) # 把所有字符中的大写字母转换成小写字母
print(str.capitalize()) # 把第一个字母转化为大写字母,其余小写
print(str.title()) # 把每个单词的第一个字母转化为大写,其余小写
'''
#16进制转10进制 FFFF 65535
#a = input()
#a = '0x' + a
#print(int(a,16)) #注意:int最终输出为10进制
#16进制转8进制
n = int(input()) #想要转换的数的个数
l1 = [] #存储要输出的转换后的8进制字符串
for i in range(n):
a = input() #接收转换的数
a = '0x' + a
b = int(a,16) #16进制对应的10进制数
s = oct(b)[2:]
l1.append(s)
#输出:
for i in l1:
print(i)
进制转换
15.问题15(这个的知道内存的知识):
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出一行,按从小到大的顺序输出排序后的数列。
5
8 3 6 4 9
3 4 6 8 9
n = int(input()) #列表的长度
l1 = input().split()#接收传入的数字,转为列表
l1 = [int(i) for i in l1]
#print(l1)
#list.sort(cmp=None, key=None, reverse=False)
'''
l1ed = l1.sort()
print(id(l1ed),id(l1.sort()),id(l1))
print(l1ed)
#这块的话:l1ed指向那个l1排序后的那个空间,
#而sort的话是在原内存上面进行的,那边是空的
#list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,
#而不是在原来的基础上进行的操作。
'''
l1.sort()
for i in l1:
print(i,end = ' ')
数列排序
16. 题目16:时间转换,将秒换为时分秒的形式
#eg: input:3661 #(t最大为86399,其 < 60**3)
#output: 1:1:1
t = int(input())
shi = 0
fen = 0
miao = 0
if t < 60:
miao = t
elif t < 60**2:
fen = t//60
miao = t - fen*60
else:
shi = t//(60**2)
fen = (t - shi*3600)//60
miao = t - shi*3600 - fen*60
print(str(shi) + ":" + str(fen) + ":" + str(miao))
时间转换
17. 题目17:
#给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
#1:两个字符串长度不等。比如 Beijing 和 Hebei
#2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
#3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
#4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
#编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
'''
print(str.upper()) # 把所有字符中的小写字母转换成大写字母
print(str.lower()) # 把所有字符中的大写字母转换成小写字母
print(str.capitalize()) # 把第一个字母转化为大写字母,其余小写
print(str.title()) # 把每个单词的第一个字母转化为大写,其余小写
'''
s1 = input()
s2 = input()
if len(s1) != len(s2):
print(1)
elif s1 == s2:
print(2)
elif s1 != s2 and s1.upper() == s2.upper():
print(3)
else:
print(4)
字符串判断
18.题目18:
因式分解:输入范围[a b],输出其中所有数字的因式分解。
3 10
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
#str = "-";
#seq = ("a", "b", "c")
#print(str.join( seq )) #a-b-c
a, b = map(int, input().split())
for num in range(a,b+1):
e = num #备份num
m = [] #用来存储各个分式
while e != 1:
for i in range(2,num+1):
if e%i == 0:
m.append(str(i))
e //= i
break
#因为例如4 = 2*2,试了2之后还要试2
print("{}=".format(num),end="")
print("*".join(m))
#原文地址:
因式分解
19.题目19(这个测试数据是正确的,但是我真不知道问题出在哪里):
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
输入格式
第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
输出格式
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
import numpy as np
m,n = map(int,input().split())# m阶矩阵,n次幂
mx = np.zeros((m,m),dtype="int") #存储矩阵元素
i = 0 #遍历每一行时候的指针
mx_row_str = [] #存储矩阵元素每一行的字符串形式
mx_row_int = [] #存储矩阵元素每一行的数字形式
#1.循环写入矩阵
while i < m:
mx_row_str = input().split()
mx_row_int = [int(j) for j in mx_row_str]
mx[i] = mx_row_int
i += 1
#2.将array转为mat(矩阵)形式,因为矩阵有运算
mx = np.mat(mx)
mx_out = mx**n
#print(mx_out)
#3.输出为指定格式
mx_out = mx_out.tolist()
#这个输出格式这块注意一下
for i in mx_out:
for j in i:
print(j,end = ' ')
print("\t")
#print(mx_out)
矩阵的幂
20.题目20:
问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
#原文链接:https://www.pythonf.cn/read/12682
#用个list转换就可以:
s1 = list(map(float, input().split()))
s2 = list(map(float, input().split()))
if s1[0] > s1[2]:
s1[0],s2[2] = s1[2],s1[0] #交换x轴
if s1[1] > s1[3]:
s1[1],s2[3] = s1[3],s1[1] #交换y轴
if s2[0] > s2[2]:
s2[0],s2[2] = s2[2],s2[0] #交换x轴
if s1[1] > s1[3]:
s2[1],s2[3] = s2[3],s2[1] #交换y轴
#print(s1,s2)
temp_x1 = max(s1[0],s2[0]) #中间矩形的横坐标(左)
temp_y1 = max(s1[1],s2[1])
temp_x2 = min(s1[2],s2[2]) #中间矩形的横坐标(右)
temp_y2 = min(s1[3],s2[3])
if temp_x1 > temp_x2 or temp_y2 < temp_y1:
r = 0
else:
r = abs(temp_x1-temp_x2)*abs(temp_y1-temp_y2)
print("{:.2f}".format(r))
矩形面积交