蓝桥等考Python组别十八级06(热气球)

蓝桥等考Python组别十八级006

第一部分:选择题

1、Python L18 (15分)

运行下面程序,输入40,输出的结果是(    )。

n = int(input())

if n % 2 == 0 and n % 10 == 4:

    print(n // 2)

else:

    print(n // 2 + 1)

  1. 20
  2. 21
  3. 40
  4. 41

正确答案:B

2、Python L18 (15分)

运行下面程序,输入3,输出的结果是(    )。

n = int(input())

ans = 0

for i in range(1, n + 1):

    ans += (1 + i) * 2

print(ans)

  1. 15
  2. 18
  3. 20
  4. 21

正确答案:B

3、Python L18 (20分)

运行下面程序,输入6,输出的结果是(    )。

n = int(input())

i = 0

while n > 1:

    n //= 2

    i += 1

print(i)

  1. 1
  2. 2
  3. 3
  4. 4

正确答案:B

第二部分:编程题

4、Python L18 热气球(50分)

题目名称:热气球

题目描述:

旅游景区新开设了一项极其刺激的游乐项目——热气球飞行。在确定票价之前,景区想先对游客的乘坐意愿和消费能力进行一次摸底。

有n个游客按顺序排成一队,每人都填报了一个数字,表示他(她)愿意花多少钱去体验这个项目。因为项目对游客的勇气有极高要求,有些人填报的数字可能是负数,表示只有当有人给他(她)钱的情况下才愿意去乘坐。

热气球最多乘坐m个人,景区的组织者想从这n个游客中选出连续的不超过m个,乘坐热气球飞行,使得这趟飞行获得的收益最大(收益用钱数衡量,即这不超过m个游客,填报的数字之和)。请你计算组织者可能获得的最大收益。

输入:

第一行一个整数n;

第二行一个整数m(1<=m<=n<100);

第三行,以字符串形式输入n个不相同的整数(大小在-100~100范围内),相邻两个整数用一个空格分隔,依次表示每个游客愿意花多少钱去体验这个项目。

输出:

一个整数,代表景区的组织者可能获得的最大收益。

输入样例1:

5

2

1 2 3 2 1

输出样例1:

5

输入样例2:

6

3

1 -2 3 -4 5 -6

输出样例2:

5

参考程序1:

n = int(input())

m = int(input())

a = [int(i) for i in input().split(' ')]

ans = 0

front = 0 #队首元素位置

rear = 0 #队尾元素位置

for i in range(n):

    rear += 1 #队尾入队

    if a[i] < 0 or rear - front >= m: #如果队尾是负数

        front += 1 #队首出队

        while front < n and a[front] < 0: #如果新队首是负数,也都出队

            front += 1

    ans = max(ans, sum(a[front: rear+1])) #更新最大收益

print(ans)

参考程序2:

n = int(input())

m = int(input())

a = [int(i) for i in input().split(' ')]

ans = 0

for i in range(n):

    for j in range(i + 1, n + 1):  

        if j-i<=m:

            ans = max(ans, sum(a[i: j]))

print(ans)

参考程序3:

n = int(input())

m = int(input())

a = [int(i) for i in input().split(' ')]

a.insert(0, 0)

dp = [0] * (n + 1)

for i in range(1, n + 1):

    if a[i] > 0:

        M = 0

        for j in range(i, max(0, i - m), -1):

            M = max(M, sum(a[j : i + 1]))

        dp[i] = max(M, dp[i - 1])

    else:

        dp[i] = dp[i - 1]

print(dp[n])

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值