才发现,做笔试犯了一个很低级的错误,导致一道题都没通过,也不知道对不对,将就看吧
# 第一题:给定一个3*n的矩阵,从每一列选出一个数字组成一个长度为n的列表,使得列表的绝对值之和最小,即sum(a[i]-a[i+1]).
a=[[48,9,7,15,6],
[89,51,2,7,62],
[21,9,18,30,81]]
# a=[]
# for i in range(3):
# a.append(list(map(int,input().split())))
res=[]
col =len(a[0])
row=0
while row<3:
ans=[]
temp = a[row][0]
ans.append(temp)
for i in range(1,col):
maxDiff = abs(ans[i-1]-a[0][i])
index=0
for j in range(1,3):
if abs(ans[i-1]-a[j][i])<maxDiff:
maxDiff = abs(ans[i-1]-a[j][i])
index=j
ans.append(a[index][i])
row+=1
absValue=0
for k in range(len(ans)-1):
absValue+=abs(ans[k]-ans[k+1])
res.append(absValue)
print(min(res))
# 第二题:给定一个n*n矩阵,每一行每列都是等差序列,但有些位置为0,你需要利用等差序列性质将这些位置填充,实在无法填充,返回unkown.
import numpy as np
a=[[1,0,3,0],
[2,4,0,8],
[0,0,0,0]]
row=len(a)
col = len(a[0])
for i in range(row):
temp= np.array(a[i][:])
index= np.where(temp!=0)[0]
value = temp.ravel()[index]
# print(index,np.shape(index)[0])
if len(index)>1:
d=(value[1]-value[0])/(index[1]-index[0])
x = np.where(temp==0)[0]
for j in range(len(x)):
a[i][x[j]]=value[0]+(x[j]-index[0])*d
print(a)
a =np.array(a)
for i in range(col):
temp= np.array(a[:,i])
print(temp)
index= np.where(temp!=0)[0]
value = temp.ravel()[index]
# print(index,np.shape(index)[0])
if len(index)>1:
d=(value[1]-value[0])/(index[1]-index[0])
x = np.where(temp==0)[0]
for j in range(len(x)):
a[x[j]][i]=value[0]+(x[j]-index[0])*d
print(a)