刷题上头! | 豆包MarsCode AI刷题

111 阅读4分钟

不过还是有几道没做出来。。。。。还是很有进步的!  

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