1、蛇形矩阵
解题思路:每次赋值后都对方向进行改变,一般上下左右就是(-1,0),(0,1),(1,0),(0,-1),每次赋值后都要判断是否撞墙,然后再次更新方向。
n,m=map(int,input().split())
res=[[0 for j in range(m)] for i in range(n)]
dx=[-1,0,1,0]
dy=[0,1,0,-1]
x,y,d=0,0,1
for i in range(n*m):
res[x][y]=i+1
a=x+dx[d]
b=y+dy[d]
if a<0 or a>=n or b<0 or b>=m or res[a][b]>0:
d=(d+1)%4
a=x+dx[d]
b=y+dy[d]
x,y=a,b
for i in range(n):
for j in range(m):
print(res[i][j],end=' ')
print()
2、不同正整数的个数
解题思路:先按列表输入,再将列表转化为集合,此时由于集合的性质导致集合会去除重复的元素,若有0再去掉,返回个数即可,discard函数删除一个元素时,若没有此元素不会报错,但是remove函数会报错,此处也可以用if not来判断0是否存在。
n=int(input())
a=list(map(int,input().split()))
b=set(a)
b.discard(0)
print(len(b))
3、跳台阶
def tj(cur,n):
if cur==n:
return 1
elif cur>n:
return 0
else:
return tj(cur+1,n)+tj(cur+2,n)
n=int(input())
print(tj(0,n))
4、走方格
def f(x,y):
if x<0 or y<0:
return 0
if x==0 and y==0:
return 1
return f(x-1,y)+f(x,y-1)
n,m=map(int,input().split())
print(f(n,m))
5、全排列(dfs深搜)
n=int(input())
path=[0 for i in range(n)]
st=[False for i in range(n)]
def dfs(u):
if u==n:
for i in path:
print(i+1,end=' ')
print()
else:
for i in range(n):
if not st[i]:
st[i]=True
path[u]=i
dfs(u+1)
st[i]=False
#path[u]=0
dfs(0)
6、火柴棒等式
n=int(input())
cnt = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6]
def get(x):
res=0
for i in str(x):
res+=cnt[int(i)]
return res
s=[get(i) for i in range(2000)]
ct=0
for i in range(0,1000):
for j in range(0,1000):
if s[i]+s[j]+s[i+j]+4==n:
ct+=1
print(ct)