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,1for i in range(n*m):res[x][y]=i+1a=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)%4a=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 1elif cur>n:return 0else: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 0if x==0 and y==0:return 1return 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]=Truepath[u]=idfs(u+1)st[i]=False#path[u]=0dfs(0)
6、火柴棒等式
n=int(input())
cnt = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6]
def get(x):res=0for i in str(x):res+=cnt[int(i)]return ress=[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)