不过还是有几道没做出来。。。。。还是很有进步的!
1. 输入一个10进制数字,输出这个数8进制表示
例子:
输入: 10
输出: 12
测试输入: 1000000
转为八进制 转为整型 去掉0o的逻辑为什么半天理不清
import re
a_in=int(input())
a=re.sub("0o", "", oct(a_in))
print(a)
1000000
3641100
2. 给定一个矩阵,找出从左上到右下角的一条路,使得这条路上数字和最大。这条路前进的方向只能向右或向下。输入的第一行是矩阵的行数和列数。输出第一行是一个序列,为该条路上的数字,第二行是这些数字的和。
例子
输入:
3 3
1 4 3
2 3 1
2 3 4
输出
1 4 3 3 4
15
测试输入:****
5 5
1 1 1 1 2
2 3 4 1 4
3 1 4 2 4
2 1 5 7 2
4 3 3 4 5
读入
m,n = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(m)]
动态规划
dp = [[0]*n for _ in range(m)]
dp[0][0]=matrix[0][0]
for i in range(1,m):
dp[i][0]=dp[i-1][0]+matrix[i][0]
for j in range(1,n):
dp[0][j]=dp[0][j-1]+matrix[0][j]
for i in range(1,m):
for j in range(1,n):
dp[i][j] = max(dp[i-1][j], dp[i][j-1])+matrix[i][j]
path=[]
i,j=m-1,n-1
while i >= 0 and j >= 0:
path.append(matrix[i][j])
if i>0 and dp[i][j] == dp[i-1][j]+matrix[i][j]:
i-=1
elif j > 0 and dp[i][j] == dp[i][j - 1] + matrix[i][j]:
j-=1
path.reverse()
print(path)
print(dp[m-1][n-1])
1, 1, 3, 4, 1, 2, 4, 7, 5
35
3. 给定一个矩阵,找出从左上到右上角的一条路,使得这条路上数字和最大。这条路前进的方向有如下限制,第一段只能向右或向下,第二段只能向右或向上。输入的第一行是矩阵的行数和列数。输出第一行是一个序列,为该条路上的数字,第二行是这些数字的和。
例子
输入:
3 4
1 1 1 1
2 3 2 2
2 3 4 1
输出
1 2 3 3 4 2 2 1
18
测试输入:****
5 5
1 1 1 1 2
2 3 4 1 4
3 1 4 2 4
2 1 5 7 4
4 3 3 4 5
4. 一个自重复串是一个字符串,其前一半和后一半是一样的,例如 abcdbabcdb (长度一定是偶数)。
输入一个字符串,找出其中最长的自重复子串。这里的子串要求连续。****
例子
输入:
abababcdabcd
输出:
Abcdabcd
测试输入: faaacabcddcbabcddcbedfgaac
s=input("输入字符串")
n=len(s)
max=0
lmax=""
for i in range(n):
for j in range (i+2, n+1, 2):
l=j-i
if s[i:i+l//2] == s[i+l//2:j]:
if l>max:
max=l
lmax=s[i:j]
print(lmax)
输入字符串faaacabcddcbabcddcbedfgaac
abcddcbabcddcb
5. 一个自重复串是一个字符串,其前一半和后一半是一样的,例如 abcdbabcdb (长度一定是偶数)。输入一个字符串,找出其中最长的自重复子串。 这里的子串可以不连续。
例子
输入:
abababcccdaaaabcd
输出:
Aaabcdaaabcd
测试输入: fabzacabtcddcbabecdfdcbedfgaac
6. 输入一个无向图邻接矩阵A(Aij=1代表i点和j点相连,0代表不相连)。输出这个图的联通分量的个数(一个联通分量就是一个子图,该子图每两个点间都可以有路径到达)。输入第一行是这个图点的个数。
例子
输入:
5
0 1 1 0 0
1 0 1 0 0
1 1 0 0 0
0 0 0 0 1
0 0 0 1 0
输出
2
(注:该图有两个联通分量,一个是{1,2,3}, 一个是{4,5})
测试输入:****
7
0 1 0 0 0 1 0
1 0 0 0 0 0 0
0 0 0 1 1 0 0
0 0 1 0 1 0 0
0 0 1 1 0 0 0
1 0 0 0 0 0 1
0 0 0 0 0 1 0
n = int(input())
graph = [list(map(int, input().split())) for _ in range(n)]
记录
visited = [False] * n
def dfs(node):
visited[node] = True
for neighbor in range(n):
if graph[node][neighbor] == 1 and not visited[neighbor]:
dfs(neighbor)
计算联通分量
connected_components = 0
for i in range(n):
if not visited[i]:
# 每发现一个未访问的节点,启动一个新的DFS,联通分量数+1
connected_components += 1
dfs(i)
print(connected_components)
7
0 1 0 0 0 1 0
1 0 0 0 0 0 0
0 0 0 1 1 0 0
0 0 1 0 1 0 0
0 0 1 1 0 0 0
1 0 0 0 0 0 1
0 0 0 0 0 1 0
2
进程已结束,退出代码0