目录
简单递归求和
题省略!
import sys
sys.setrecursionlimit(100000)
def f(n:int):
if n==1:
return 1
if n%2==0:
return f(n-1)-2*n+1
else:
return f(n-1)+2*n-1
while True:
n=int(input())
print(f(n))
递归求和
题目描述
使用递归编写一个程序求如下表达式的计算结果: (1<n<=20)
S(n) = 1*4 + 4*9 + 9*16 + 16*25 + ... + ((n-1)^2)*n^2
输入n,输出表达式S(n)的结果。
输入
单组输入,输入一个正整数n,1<n<=20。
输出
输出表达式S(n)的计算结果。
样例输入 Copy
3
样例输出 Copy
40
import sys
sys.setrecursionlimit(100000)
def s(n:int):
if n==2:
return 4
return s(n-1)+((n-1)**2)*(n**2)
while True:
n=int(input())
print(s(n))
文件存储
题省略!
while True:
m,n=map(int,input().split())
a=list(map(int,input().split()))
a.sort()
ans=0
for i in range(n):
if a[i]<=m:
ans+=1
m-=a[i]
print(ans)
图的m着色问题
题目描述
给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色,请输出着色方案。
输入
输入第一行包含n,m,k分别代表n个结点,m条边,k种颜色,接下来m行每行有2个数u,v表示u和v之间有一条无向边,可能出现自环边,所以请忽略自环边。
输出
输出所有不同的着色方案,且按照字典序从小到大输出方案。
样例输入 Copy
3 3 3 1 2 1 3 2 3
样例输出 Copy
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
def check(t,i):
for j in range(1,t):
if g[t][j]==1 and colors[j]==i:
return 0
return 1
def solve(t):
if t>n:
for i in range(1,n+1):
print(colors[i],end=' ')
print()
else:
for i in range(1,m+1):
if check(t,i)==1:
colors[t]=i
solve(t+1)
while True:
n,m,k=map(int,input().split())
g=[[0 for j in range(n+1)] for i in range(n+1)]
colors=[i for i in range(n+1)]
for i in range(m):
u,v=map(int,input().split())
g[u][v]=1
g[v][u]=1
solve(1)
素数环
题目描述
现有1,2,3...,n,要求用这些数组成一个环,使得相邻的两个整数之和均为素数,要求你求出这些可能的环。
输入
输入正整数n。
输出
输出时从整数1开始逆时针输出,同一个环只输出一次,且满足条件的环应按照字典序从小到大输出。
注:每一个环都从1开始。
注:每一个环都从1开始。
样例输入 Copy
6
样例输出 Copy
1 4 3 2 5 6 1 6 5 2 3 4
def solve(i,n,g,c):
if i<n:
for j in range(1,n+1):
if c[j-1]==0:
if i!=n-1:
check=0
for k in range(2,g[i-1]+j):
if (g[i-1]+j)%k==0:
check=1
break
if check==0:
g[i]=j
c[j-1]=1
solve(i+1,n,g,c)
g[i]=0
c[j-1]=0
else:
check=0
for k in range(2,g[i-1]+j):
if (g[i-1]+j)%k==0:
check=1
break
for k in range(2,g[0]+j):
if (g[0]+j)%k==0:
check=1
break
if check==0:
g[i]=j
c[j-1]=1
solve(i+1,n,g,c)
g[i]=0
c[j-1]=0
else:
for j in range(n):
print(g[j],end=" ")
print()
while True:
n=int(input())
g=[0 for i in range(n)]
c=[0 for j in range(n)]
g[0]=1
c[0]=1
solve(1,n,g,c)
N皇后问题
题目描述
使用回溯法求解N后问题。
输入
皇后的个数。
输出
每一种方案及总方案数。
样例输入 Copy
4
样例输出 Copy
0 1 0 0 0 0 0 2 3 0 0 0 0 0 4 0 ---------------- 0 0 1 0 2 0 0 0 0 0 0 3 0 4 0 0 ---------------- 总方案数为:2
def solve(i):
global n,count
for j in range(n):
if m[j]==0 and l[i+j]==0 and r[i-j+n]==0:
a[i][j]=i+1
m[j]=l[i+j]=r[i-j+n]=1
if i==n-1:
p(a)
count+=1
else:
solve(i+1)
a[i][j]=0
m[j]=l[i+j]=r[i-j+n]=0
return count
def p(a):
for i in range(n):
for j in range(n):
print(a[i][j],end=' ')
print()
print("----------------")
n=int(input())
count=0
a=[[0]*n for _ in range(n)]
m=[0]*n
l=[0]*(2*n)
r=[0]*(2*n)
k=solve(0)
print("总方案数为:"+str(k))