![](https://i-blog.csdnimg.cn/blog_migrate/28457d973ac827bdd44f5f5a58805b7a.png)
如题,如果对你有帮助的话可以小小滴赞一下o(* ̄▽ ̄*)ブ~
1.A+B问题
比较简单,题目要求在一行输入,用map函数即可
a, b = map(int, input().split())
print(a + b)
2.数列排序
直接用python的内置sort函数解决,法二和法一比起来控制了空格的输出,更为严谨
# 法一
n = int(input()) # 输入一个整数
lst = list(map(int, input().split()))
lst.sort()
for i in lst:
print(i, end=" ")
print("")
# 法二
n = int(input())
lst = list(map(int, input().split()))
lst.sort()
for i in range(0, len(lst)):
# range()函数是左闭右开
if i == len(lst) - 1:
print(lst[i])
break
else:
print(lst[i], end=" ")
3.十六进制转八进制
同样用内置函数解决,有详细注释,如果有必要可以单独出一篇博客
n = int(input())
lst = []
for i in range(n):
if 1 <= n <= 10:
# 相当于0~n,左闭右开,一共n个元素,下标从0~n-1
# 二/八/十六(准确来说是2~36均可)->十进制整数 int()
# 十进制整数->十六进制整数 hex()
# 十进制整数->二进制 bin()
# 十进制整数->八进制 oct()
num = input()
if len(num) <= 100000:
temp = int(num, 16) # 将16进制的所输入数转换为10进制数
# 或者这里可以 temp=int(num,0),但前提是你以'0x+num'的形式输入这个字符串
temp = oct(temp) # 再把10进制数转换为八进制数
# 这个时候你转换出来的是一个字符串,且带0x+num,为了把数字提出来,使用切片的方法
temp = temp[2:] # 把第二位及以后的提取出来
lst.append(temp)
for i in lst:
print(i, end='\n') # 每打印一个字符换行做结
4.十六进制转十进制
内置函数用于进制转换不区分大小写
num = input()
if len(num) <= 8:
print(int(num, 16))
5.十进制转十六进制
num = int(input())
if 0 <= num <= 2147483647:
num = hex(num)
num = num[2:]
num = num.upper()
print(num)
6.特殊回文数
n = int(input())
if 1 <= n <= 54:
for num in range(10000, 1000000):
# 五位数和六位数,则取值为10000~999999
string = str(num)
if string == string[::-1]: # 如果是回文数
if n == sum(int(i) for i in list(string)):
# 将字符串转列表,进行求和
print(string)
7.回文数
# 法一:同样的,1000~9999
for i in range(1000, 10000):
# 注意range是左闭右开的,右侧是10000才能包含9999
str1 = str(i)
str2 = str1[::-1]
if str1 == str2:
print(i)
# 法二:碰瓷法
for a in range(1, 10): # 最高位起码得为1吧
for b in range(0, 10):
for c in range(0, 10):
for d in range(0, 10):
res1 = a * 1000 + b * 100 + c * 10 + d
res2 = a * 1 + b * 10 + c * 100 + d * 1000
if res1 == res2:
print(res1)
8.特殊的数字
其实就是水仙花数
# 法一:(暴力)三位整数只能是100~999
# 这里有一个非常易错的问题,python中的地板除是//
for num in range(100, 999):
a = num // 100
b = num // 10 % 10
c = num % 10
if pow(a, 3) + pow(b, 3) + pow(c, 3) == num:
print(num)
# 法二:整形转字符串,提取每一位数字后转整形
for num in range(100, 999):
# 提取num中的每一位
Sum = 0
for i in str(num):
Sum = Sum + pow(int(i), 3)
if Sum == num:
print(num)
# 法三:组合数字碰瓷法
for a in range(1, 10): # 最高位数字从1开始就是三位数
for b in range(0, 10):
for c in range(0, 10):
res = a * 100 + b * 10 + c
if pow(a, 3) + pow(b, 3) + pow(c, 3) == res:
print(res)
9.杨辉三角形
用二维列表的方式来表示
# python中的二维数组
n = int(input())
if 1 <= n <= 34:
triangle = [[1], [1, 1]]
# 前两行已知了
for i in range(2, n):
pre = triangle[i - 1] # 上一行
now = [1] # 第一个元素是1
for j in range(i - 1): # 做i-1次和上一行配合的运算
now.append(pre[j] + pre[j + 1])
now.append(1) # 最后一个元素是1
triangle.append(now) # 二维数组直接添加一维数组
for i in triangle: # i代表每一行
for j in i: # j代表一行中的每一个元素
print(j, end=" ")
print("") # 每打印完一行换行
10.查找整数
n = int(input())
lst = list(map(int, input().split())) # 能满足任意数量
find = int(input())
for i in lst:
if i == find:
print(lst.index(i) + 1)
break
# 如果是在if中找到了break后也不进入else
# 如果没有if都不成立,才进入else
else:
print("-1")
11.数列特征
直接用自带的函数即可
n = int(input())
if 1 <= n <= 10000:
lst = list(map(int, input().split()))
print(max(lst))
print(min(lst))
print(sum(lst))
12.字母图形
n, m = map(int, input().split())
if n >= 1 and m <= 26:
# 构造第一行
Str = ""
for j in range(m):
Str += chr(65 + j)
print(Str)
for i in range(n - 1): # 进行4次操作
# 注意这里会犯一个比较容易犯的错误:字符串是不可更改的对象
# 需要拆成列表对元素进行更改过后再用join组合起来
lst = list(Str)
for j in range(m - 1, 0, -1):
lst[j] = lst[j - 1]
lst[0] = chr(65 + (i + 1))
Str = ''.join(lst)
print(Str)
13.01字串
for i in range(0, 2):
for j in range(0, 2):
for k in range(0, 2):
for m in range(0, 2):
for n in range(0, 2):
print(i, j, k, m, n, sep="")
# 默认每两个数字之间是空格,这里用sep=""设置无间隔
14.闰年判断
def leap_year(n):
if (n % 4 == 0 and n % 100 != 0) or n % 400 == 0:
print("yes")
else:
print("no")
n = int(input())
leap_year(n)
15.斐波那契数列
用迭代替换递归,否则超时
# def fib(n):
# if n==1 or n==2:
# return 1
# elif n>2:
# return fib(n-1)+fib(n-2)
#
# n=int(input())
# if n>=1 and n<=1000000:
# print(fib(n)%10007)
# 上面这种做法会超时,因为正向推fib就是一个满二叉树
# 下面这种做法直接每一步都求余数且没用递归,而是迭代
def fibo(n):
# python逗号表达式
a, b = 1, 1 # a=1,b=1
for i in range(2, n + 1):
# 从2~n
# 直接每一步都算余数反而更方便
a, b = b, (a + b) % 10007
# 相当于 a=b,b=(a+b)%10007
return a
n = int(input())
print(fibo(n))
16.圆的面积
# pi=3.14159265358979323
import math
r = int(input())
s = math.pi * r * r
print("{:.7f}".format(s))
17.序列求和
# def myfun(n):
# sum=0
# for i in range(1,n+1):
# sum=sum+i
# return sum
# n=int(input())
# print(myfun(n))
# 靠,超时了,那就直接等差数列求和了
n = int(input())
print(int(((1 + n) * n) / 2))
如果有更好的方法或者见解以及发现的错误,欢迎在评论区中发言~