1.显然 考察数组的知识,再看存储格式,直接用二维列表表示矩阵。
2.显然 运动轨迹是下右上左,限定运动次数即是矩阵中正整数的个数,判断轨迹方法:不可超过边界,遍历过的点不再遍历第二遍因此需要做标记。
3. 确定拐弯方向:由于只有四种方式且是循环执行所以,计数器从0开始计数,每过一步就加1对4取余即可判断拐弯方向。
4. 输出当前正整数,标准化输出后将走过的点标记即可。
l=[]
m,n=map(int,input().split())
for i in range(m):
l.append(input().split())
dir=[[1,0],[0,1],[-1,0],[0,-1]]#下右上左
sum=m*n
x,y=-1,0
d=0#指针用来确定移动方向
while sum>0:
sum=sum-1
nx,ny=x+dir[d][0],y+dir[d][1]#确定下一个走的位置:xy是当前位置nx,ny是下一步的位置
if nx<0 or nx>=m or ny<0 or ny>=n or l[nx][ny]==-1:#需要换方向的情况,走过的标记为-1,输入的都是正正数所以不打架
d=(d+1)%4 #确定拐弯方向
x,y=x+dir[d][0],y+dir[d][1]#移动到下一个
else:#不需要换方向的时候
x,y=nx,ny
print(l[x][y],end=" ")#按标准空格分割
l[x][y]=-1#将走过的标记
区间修改、区间求和 lanqiaoOJ题号1133
【题目描述】
给定一个长度为n的数组,其初值分别为a1, a2, …, an。有m个操作,操作有两种:
1 l r k,将区间al+1, …, ar的值加上k。
2 l r,求区间al, al+1 ,…, ar的和是多少。
【输入描述】
输入第1行包含两个正整数n,m,分别表示数组a的长度和操作的个数。
第2行包含N 个非负整数a1,a2,…,an,表示数组a元素的初值。第3~Q?2行每行表示一个操作,格式如题
【输出描述】
对每个求和输出1行,每行包含一个整数,表示相应查询的答案。
n ,q = list(map(int, input().split()))
a = [int(i) for i in input().split()]
for i in range(q):
s=list(map(int, input().split()))
#执行加k操作
l = s[1]-1
r = s[2]-1
if s[0]==1:
k = s[3]
for j in range(l,r+1):
a[j] += k
else:
print(sum(a[l:r+1]))
题号 1518但现在在OJ找不到
问题描述
有n辆自行车依次来到停车棚,除了第一辆自行车外,每辆自行车都会恰好停放在已经在停车棚里的某辆自行车的左边或右边。(e.g.停车棚里已经有3辆自行车,从左到右编号为:3,5,1。现在编号为2的第4辆自行车要停在5号自行车的左边,所以现在停车棚里的自行车编号是:3,2,5,1)。给定n辆自行车的停放情况,按顺序输出最后停车棚里的自行车编号。
输入格式
第一行一个整数n。
第二行一个整数x。表示第一辆自行车的编号。
以下n-1行,每行3个整数x,y,z。
z=0时,表示编号为x的自行车恰停放在编号为y的自行车的左边
z=1时,表示编号为x的自行车恰停放在编号为y的自行车的右边
输出格式
从左到右输出停车棚里的自行车编号
样例输入
4
3
1 3 1
2 1 0
5 2 1
样例输出
3 2 5 1
l=[]
l.index()#索引
l.insert()#插入
l.append()#追加
l.count()#计数
l.remove()#删除
l.pop()#移除并返回删除的值
l.sort()#排序
l.clear()#清空列表
l.copy()#复制
l.extend()#追加可迭代对象
l.reverse()#返转
n=int(input())
x=input()
l=[]
l1=[x]
for i in range(n-1):
l.append(input().split())
for i in l:
#print(i)
if i[2]==1:
l1.insert(l1.index(i[1]),i[0])
else:
l1.insert(l1.index(i[1])+1,i[0])
for i in l1:
print(i,end=" ")
n=int(input())
x=int(input())
l=[]
l1=[x]
for i in range(n-1):
x,y,z=map(int,input().split())
if z==0:#左边
l1.insert(l1.index(y),x)
else:#右边
l1.insert(l1.index(y)+1,x)
for i in l1:
print(i,end=" ")
a=list(int(i) for i in range(1,11))#生成原始数组
b=[]#存放重排序之后的
n=int(input())
for i in range(n):
x=int(input())
index=a.index(x)
a.pop(index)
a.insert(0,x)
for j in a:
b.append(j)
sum=0#计数器
for i in b:
print(i,end=" ")
sum+=1
if sum%10==0:#每十个就换行输出
print(end="\n")#注意print()中参数的使用方法,等价于print("")
n,k,m=map(int,(input().split()))
l=list(range(1,n+1))#人为1到10
i=k-1#位序从零开始所以减1
while len(l)>0:#只要有人没出来
i=(i+m-1)%len(l)#报数又是从1开始报数所以减一
print(l.pop(i))#人出去