2024年春季学期《算法分析与设计》练习2(计科和信管)

问题 A: 骨牌覆盖

题目描述

用大小为1×2的骨牌铺满一个大小为2×n的长方形方格,编写一个程序,输入n,输出铺放方案总数。例如,输入n=3,即大小为2×3的方格,输出3。3种骨牌铺放方案如下图所示:
 

输入

多组测试用例,每一组是一个正整数。

输出

每组输出占一行。
只需要输出铺放方案总数,不需要输出具体的铺放方案。

样例输入 Copy
3
样例输出 Copy
3
def gujia(n):
    i = 0
    if n == 1:
        i = 1
    elif n == 2:
        i =2
    else:
        i = gujia(n-1) + gujia(n-2)
    return i

while True:
    num = int(input())
    print(gujia(num))

问题 B: 蜂房

题目描述

有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。
 

输入

多组数据输入,每组数据包含两个正整数a, b,且 a<b。

输出

蜜蜂从蜂房a爬到蜂房b的可能路线数。

样例输入 Copy
1 2
3 4
样例输出 Copy
1
1
def bee(n):
    i = 0
    if n == 1:
        i = 1
    elif n == 2:
        i =2
    else:
        i = bee(n-1) + bee(n-2)
    return i

while True:
    a,b = map(int,input().split(" "))
    num = b - a
    print(bee(num))

问题 C: 递归求和

题目描述

使用递归编写一个程序求如下表达式的计算结果:  (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
def S(n):
    if n ==1:
        return 0
    else:
        return S(n-1)+((n-1)*(n-1))*(n*n)

num = int(input())
print(S(num))

问题 D: 简单递归

题目描述

请使用递归编写一个程序求如下表达式的计算结果: 
S(1) = 1/2
S(2) = 1/2 - 1/6
S(3) = 1/2 - 1/6 + 1/12
S(4) = 1/2 - 1/6 + 1/12 - 1/20
......
S(n) = 1/2 - 1/6 + 1/12 - 1/20 + 1/30 + ......
输入n (1<n<=100),输出表达式S(n)的值(四舍五入,精确到小数点后六位)。
请编写一个递归程序实现该功能。

输入

单组输入,输入一个正整数n,1<n<=100。

输出

输出表达式S(n)的计算结果(四舍五入,精确到小数点后六位)。

样例输入 Copy
2
样例输出 Copy
0.333333
def S(n):
    if n == 1:
        return 1/2
    else :
        sign = 1 if n % 2 == 1 else -1
        fenmu = n * (n + 1)
        return S(n-1) + sign / fenmu

num = int(input())
ans = S(num)
#四舍五入不推荐用round函数,round四舍六入五凑偶
print('%.6f'%ans)

问题 E: 填放金币

题目描述

X星人在一艘海底沉船上发现了很多很多很多金币,可爱的X星人决定用这些金币来玩一个填格子的游戏。
其规则如下:第1个格子放2枚金币,第2个格子放5枚金币,第3个格子放10枚金币,第4个格子放17枚金币,第5个格子放26枚金币,以此类推。
请问放到第n个格子时一共放了多少枚金币?
请用递归编写一个程序统计第1个格子到第n个格子的总金币数量。
【友情提醒:请使用递归来实现】

输入

多组输入。每组一个正整数n,表示最后一个格子的编号。(n<=100)

输出

对于每一组输入,输出从第1个格子到第n个格子的总金币数。

样例输入 Copy
1
3
样例输出 Copy
2
17
def S(n):
    if n == 1:
        return 2
    else :
        return S(n-1) +2 * n - 1
while True:
    num = int(input())
    ans = 0
    for i in range(1, num+1):
        ans += S(i)
    print(ans)

问题 F: X星人的数列

题目描述

爱冒险的X星人在一艘海底沉船上发现了一串神秘数列,这个数列的前6项如下:
0 1 3 7 15 31
X星人对这串数列产生了浓厚的兴趣,他希望你能够帮他发现这个神秘数列中所蕴含的规律,并且使用递归来编写一个程序输出该数列前N项的和。
当输入一个正整数N时,请输出这个神秘数列前N项的和。

输入

单组输入,每组输入一个正整数N(N<=20)。

输出

输出一个正整数,对应这个神秘数列前N项的和。

样例输入 Copy
6
样例输出 Copy
57
def S(n):
    if n == 1:
        return 0
    else :
        return S(n-1) + 2 ** (n-2)
    
num = int(input())
ans = 0
for i in range(1, num+1):
    ans += S(i)
print(ans)

问题 G: 倒序输出

题目描述

使用递归编写一个程序,逆序输出一个非负整数。例如输入1234,输出4321(不含前导0)。

输入

多组输入,每组输入一个非负整数。

输出

逆序输出结果,每个结果占一行。

样例输入 Copy
12
1230
0
样例输出 Copy
21
321
0
def reverse_print(num):
    if num < 10:
        print(num)
    else:
        print(num % 10, end='')
        reverse_print(num // 10)
        
def ten(num):
    if num < 10:
        return num
    if num % 10 != 0:
        return num
    else:
        num = int(num/10)
        return ten(num)

while True:
    num = int(input())
    num = int(ten(num))
    reverse_print(num)

问题 H: 汉诺塔

题目描述

使用递归编写一个程序实现汉诺塔问题,要求在输入圆盘数量之后,输出圆盘的移动步骤,输出格式示例如下:

第1步:1号盘从A柱移至B柱
第2步:2号盘从A柱移至C柱

 

输入
多组测试用例,每组输入一个正整数n,n代表圆盘数量。
输出
每组输出之间有一行空行。
 
样例输入 Copy

3

样例输出 Copy
第1步:1号盘从A柱移至C柱
第2步:2号盘从A柱移至B柱
第3步:1号盘从C柱移至B柱
第4步:3号盘从A柱移至C柱
第5步:1号盘从B柱移至A柱
第6步:2号盘从B柱移至C柱
第7步:1号盘从A柱移至C柱
# 定义move函数,用于模拟移动盘子
def move(n, a, b):  
    global step
    # 使用global关键字声明step为全局变量,以便在函数内部修改它的值
    #如果用step = 0,则step+=1,无效,step将一直等于1
    step += 1
    print(f"第{step}步:{n}号盘从{a}柱移至{b}柱")
  
def hanoi(n, a, b, c):  
    # 如果盘子数量大于0,则继续递归操作  
    if n > 0:  
        # 将n-1个盘子从a柱移动到b柱,使用c柱作为辅助  
        hanoi(n - 1, a, c, b)  
        # 将剩下的一个盘子从a柱移动到c柱  
        move(n, a, c)  
        # 将b柱上的n-1个盘子移动到c柱,使用a柱作为辅助  
        hanoi(n - 1, b, a, c)   
   
while True:  
    n = int(input())  
    step = 0  
    hanoi(n, 'A', 'B', 'C')
    print("")

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 3GPP长期演进(LTE)是一种通信技术,其原理是通过无线网络传输数据。系统设计旨在提供更高的数据速率、更低的延迟和更好的系统容量。 首先,LTE使用OFDMA(正交频分多址)技术来实现更高的数据速率。OFDMA将频谱划分为多个子载波,并使得不同的用户可以在不同的子载波上同时传输数据,从而提高频谱效率和数据传输速率。 其次,LTE使用MIMO(多输入多输出)技术来增加系统容量和提高信号质量。MIMO利用多个天线在发送和接收端同时传输信号,增加了信号的可靠性和速率。 此外,LTE还采用了分组交换和IP技术来优化网络传输。与传统的电路交换网络不同,LTE使用分组交换技术将数据分割为小的数据包,并通过IP网络进行传输。这种分组交换的方式可以提供更高的灵活性和扩展性,并支持更多的数据服务。 LTE还引入了新的调制和编码方案,如正交幅度调制(QAM)和Turbo编码,在保证更高的数据传输速率的同时,保持较低的误码率。 最后,LTE还引入了新的无线接入技术,如eUTRA(LTE无线接入)和eNodeB(LTE基站)。这些技术结合了上述的原理和设计,提供了更高的系统容量、更低的延迟和更好的用户体验。 综上所述,3GPP长期演进(LTE)技术的原理和系统设计主要包括OFDMA、MIMO、分组交换和IP技术、新的调制和编码方案,以及新的无线接入技术。这些设计使得LTE能够提供更高的数据速率、更低的延迟和更好的系统容量。 ### 回答2: 3GPP长期演进(LTE)技术是一种高速数据传输的蜂窝无线通信技术。其原理是通过将无线信号转换为数字信号,并利用多址技术将多个用户的信号同时传输,从而提高信号的传输效率和容量。 LTE系统设计主要包括以下几个方面: 1. 系统架构:LTE系统采用了分层的基站和核心网结构。基站包括基站控制器(eNodeB)和基站传输单元(EUTRAN)。核心网包括移动接入网(EPC)和传输控制网(GTP)。 2. 频谱分配:LTE系统采用OFDMA和SC-FDMA两种调制方式进行频谱的分配。OFDMA将频谱分为多个子载波,使每个子载波可以传输不同用户的数据。SC-FDMA则将用户的数据分配到多个子载波上,实现低功率传输。 3. 多天线技术:LTE系统采用了MIMO和空间复用技术,通过多个天线同时传输和接收信号,提高信号质量和传输速率。 4. 切换技术:LTE系统采用基于IP的分组交换技术,实现无缝切换和快速的传输速率。 5. QoS管理:LTE系统支持多种QoS等级,能够根据不同的应用场景和用户需,提供不同的传输质量和服务。 总结起来,LTE技术通过使用高效的调制方式、多天线技术和切换技术,提高了无线信号的传输速率和容量。同时,LTE系统设计采用了分层架构和IP分组交换等技术,实现了高效的信号传输和管理。这些技术使LTE成为了现代移动通信中的重要技术,为用户提供了更快速、稳定和高质量的无线通信服务。 ### 回答3: 3GPP长期演进(LTE)是一种移动通信技术,它的原理和系统设计是为了提供更高的数据传输速率和更好的用户体验。LTE是一种基于IP的无线分组数据传输技术,它利用OFDM和MIMO等先进技术来提高无线信道的利用效率和传输速率。 LTE的系统设计主要包括以下几个方面: 1. 系统架构:LTE系统采用分层的架构,包括用户面和控制面。用户面负责数据传输,控制面负责管理和控制通信过程。系统中包含基站、核心网和用户设备等组成部分,它们之间通过接口进行通信。 2. 频率分配:LTE系统采用多载波技术,并使用频分多址技术来区分不同的用户。系统将网络频谱分为多个子载波,每个子载波都可以单独分配给不同的用户进行数据传输,从而提高了系统的容量和传输速率。 3. 调制技术:LTE系统采用正交频分多路复用(OFDM)和多输入多输出(MIMO)等调制技术。OFDM技术将传输信号分成多个子载波,每个子载波都采用低复杂度的调制方式,从而提高了信道的利用效率。MIMO技术则利用多个天线进行并行的数据传输,提高了信道的容量和传输速率。 4. 接入方式:LTE系统采用无线接入网络(WiFi)和信令信道(Signaling Channel)等多种接入方式,以满足不同用户对数据传输的需。 总之,3GPP长期演进(LTE)技术的原理和系统设计是为了提高无线通信的数据传输速率和用户体验。通过采用OFDM、MIMO等先进技术,并利用多载波和频分多址等技术来提高系统的容量和利用效率,LTE系统能够实现更快速、更可靠的数据传输。这使得LTE成为了目前最主流的移动通信技术之一,并在全球范围内得到广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值