人工智能实验室第二次招新考试部分答案

发布时间 2023-11-13 19:36:28作者: 暂且留白

A.打印菱形图案

n=int(input())
a=n//2
for i in range(-a,a+1):
	c=abs(i)
	print(c*" " ,end="")
	print((2*a+1-2*c)*"*")

D.来,关个灯

n = int(input())
for i in range(1, n):
	if (i * i > n):
		break;
	print(i * i, end = ' ')

E.矩形的数量

m,n,k=map(int,input().split())
nn=n+1
yi=(nn-k)*(k-1)
a=0
if m%2==0:
    a=(1+m)*(m//2)
else:
    a=(1+m)*(m//2)+int(m/2+1)
yyy=yi*a
print((yyy)%1000000007)

F.这个最大乘积怎么求?

"""
    根据题意和贪心可以知道我们把n尽可能的分最多分(n>1)时乘积最大 然后分出刚好和比n大的几个数(因为1对乘积没有贡献)
    拿样例中的10举例从2开始分为sum =  2 + 3 + 4 + 5 , 此时和 > 10
    sum - n ≠ 1
    将 sum - n 在列表中去掉 sum - n = 4 所以左后为2 3 5
    n = 13时 sum = 2 + 3 + 4 + 5
    sum - n = 1
    我们思考把余数 1 分给谁最后的乘积最大
    通过数论很简单就知道把余数给更大的数乘积会更大,而且题目还有个条件“将指定的正整数 n 分解成若干个互不相同的自然数的和”
    所以 1 要从后往前加
    此时去掉最小的 2 把 1 + 给 5 得 3 4 6
"""
def maximize_product(n):
    # 初始化结果列表和当前要分解的数
    sum = 0
    list = []
    tmp = 0
    count = 0
    # 拆分出相连的自然数
    for i in range(2, 10000):
        list.append(i)
        tmp = i
        sum += i
        count += 1
        if sum + i + 1 > n:
            break
    sum += tmp + 1
    list.append(tmp + 1)
    x = sum - n
    if x == 1:
        list[count + 1] += 1
        list.remove(2)
    elif x > 0:
        list.remove(x)
    ans = 1
    for i in list:
        ans *= i
        print(i, end=" ")
    print()
    print(int(ans))
# 读取输入的正整数n
n = int(input())

# 调用函数来分解n并计算最大乘积
maximize_product(n)

H.解放战俘
方法一:

# 用递归每次递归将左上方的正方形清零,在递归其他三个正方形,当正方形的边长为2时结束递归。
def fun(a, b, l):
    if l == 1:
        return
    for i in range(int(a), int(a)+int(l/2)):
        for j in range(int(b), int(b)+int(l/2)):
            list[i][j] = 0
    fun(a + l / 2, b, l / 2)
    fun(a, b + l/2, l / 2)
    fun(a + l / 2, b + l / 2, l / 2)

n = int(input())
p = 2 ** n
list = [[ 1 for i in range(p)]for j in range(p)]
fun(0,0, p)
for i in range(p):
    print(' '.join(map(str, list[i])))

方法二:

#杨辉三角
n = int(input())
for i in range(1 << n):
    for j in range(1 << n):
        if (i | j) != ((1 << n) - 1):
            ans = 0
        else:
            ans = 1
        print(ans, end=" ")
    print()

I.数楼梯

n = int(input())
a1 = 1
a2 = 1
for i in range(2, n + 1):
    a3 = a2
    a2 = a1 + a2
    a1 = a3
print(a2)