逆时针打印矩阵
剑指Offer的改编题目,从顺时针变成了逆时针。对每一圈按照向下、向右、向上、向左的方向依次判断条件进行输出。
import math
def send_fruits(seq, row, col):
if not seq:
return []
res = []
# print(row, row//2, math.ceil(row/2))
for ru in range(math.ceil(row/2)):
res.extend(rotate_find(seq, ru, ru, row-ru, col-ru))
return res
def rotate_find(seq, sr, sc, er, ec):
res = []
if sr < er and sc < ec:
cr = sr
while cr < er:
res.append(seq[cr][sc])
cr += 1
if sc < ec and sr < er:
cc = sc + 1
while cc < ec:
res.append(seq[er-1][cc])
cc += 1
if sr < er - 1 and sc < ec - 1:
cr = er - 2
while cr >= sr:
res.append(seq[cr][ec-1])
cr -= 1
if sc < ec - 1 and sr < er - 1:
cc = ec - 2
while cc >= sc+1:
res.append(seq[sr][cc])
cc -= 1
return res
if __name__ == '__main__':
row, col = list(map(int, input().strip().split()))
seq = []
for _ in range(row):
seq.append(list(map(int, input().strip().split())))
res = send_fruits(seq, row, col)
print(' '.join(map(str, res)))
'''
3 3
1 2 3
4 5 6
7 8 9
'''
成绩质量评估
题目有点怪,要求限制比较多,而且时间卡得紧,使用动态规划无从下笔。这里采用暴力求解,显示超时。换成策略性的回溯,仍是超时。
def course_quality(seq, length, num):
res = 0
for si in range(length):
cur, count = 0, 0
for sj in range(si, length):
su = seq[sj]
if cur + su <= num:
cur += su
count += 1
if cur > num:
break
if count > res:
res = count
return res
if __name__ == '__main__':
n, s = list(map(int, input().strip().split()))
seq = list(map(int, input().strip().split()))
res = course_quality(seq, n, s)
print(res)
'''
3 2
1 1 3
6 5
5 1 1 1 2 3
'''
(最近更新:2019年09月16日)