2023年全国信息素养大赛_Python编程挑战赛_海南赛区_复赛真题

概述: 一共6道编程题,前4道超级简单,后2道考察逻辑分析能力和数学思维,设计算法,分析难,代码不难。

真题
第1题,整数加8

题目描述:

输入一个整数,输出这个整数加 8 的结果。

输入描述:

输入一行一个正整数。

输出描述:

输出求和的结果。

样例1:

输入:

5

输出:

13
【知识点】 类型转换和加法运算
【参考代码】:

a = int(input())
print(a+8)

第2题,哼哈二将

题目描述:

哼哈二将,形象威武凶猛,一名能鼻哼白气制敌,一名能口哈黄气擒将。

这样一次"哼哈”就可以消灭一个敌人,现在来了n个敌人,请你输出一串"哼哈"来消灭全部敌人。

例如,当n = 3时,输出”哼哈哼哈哼哈”。

输入描述:

输入一行一个正整数。

输出描述:

输出一串字符。

样例1:

输入:

3

输出:

哼哈哼哈哼哈
【知识点】 字符串的*运算

【参考代码】:

n = int(input())
print("哼哈"*n)

第3题,幸运数字8

题目描述:

在我们的文化里面,有一些幸运数字。比如8有发的谐音,代表发财旺财运的意思,人们都觉得有这个数字是非常吉利的,会给自己带来好运,因此很多时候人们对于8有着非常强烈的钟爱,比如在选择手机号和车牌号的时候,包含着8的号码总是会被优先选择输入一个数,若存在数字8则输出:是幸运数字,否则输出:不是幸运数字。

输入描述:

输入一行一个整数。

输出描述:

若存在数字8则输出:是幸运数字,否则输出:不是幸运数字。

样例1:

输入:

233

输出:

不是幸运数字

[超平老师解读]:

【知识点】 字符串的成员运算符in。

[参考代码]:

a = input()
if '8' in a:
    print("是幸运数字")
else:
    print("不是幸运数字")

第4题,摆放花盆

题目描述:

国庆节期间,学校操场上摆放了一排花盆,按照2盆菊花,4盆牡丹,2盆百日草的顺序排放,请问第n盆是什么花?

输入描述:

输入一行一个整数n表示第n盆花。

输出描述:

输入一行一个整数n表示第n盆花。

样例1:

输入:

9

输出:

菊花

【分析】 考虑摆放的周期

在这里插入图片描述
【参考程序】

a = int(input())

b = (a-1)%8 #下标从0开始计算
if b>=1 and b<=2:
    print("菊花")
elif b>=2 and b<=5:
    print("牡丹")
else:
    print("百日草")

第5题,玩石头游戏

题目描述:

你和你的朋友,两个人一起玩石头游戏:桌子上有一堆石头。你们轮流进行自己的回合,你作为先手,每一回合,轮到的人拿掉1-3块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。现在一共有n块石头,请判断你是否可以赢得游戏如果可以赢,输出win;否则,输出lose。

输入描述:

输入一行一个正整数n,表示石头的个数。

输出描述:

如果可以赢,输出win;否则,输出lose。

样例1:

输入:

4

输出:

lose

玩石头游戏提题解:
https://blog.youkuaiyun.com/diamondwang2012/article/details/132809324

属于必胜策略,分为先手和后手,使用逆推找到致胜点,找到倍数规律

n = int(input())
if n%4 == 0:
    print("lose")
else:
    print("win")

第6题,卡牌游戏

题目描述:

有n张卡牌。第i张卡牌的位置是position[i]。

我们需要把所有卡牌移到同一个位置。在一步中,我们可以将第i张卡牌的位置从position[i]改变为:

position[i] + 2 或 position[i] - 2,此时的代价 cost = 0

position[i] + 1 或 position[i] - 1,此时的代价 cost = 1

现给出所有卡牌的位置,请你编程输出将所有卡牌移动到同一位置上所需要的最小代价。

输入描述:

输入一行正整数,每个数之间用空格间隔。

输出描述:

输出将所有卡牌移动到同一位置上所需要的最小代价。

样例1:

输入:

1 2 3

输出:

1

纸牌游戏题解:
https://blog.youkuaiyun.com/diamondwang2012/article/details/132856367

使用贪心算法实现,思路是:
①把所有奇数位的纸牌放到第1位,记录移动次数a
②把所有偶数位的纸牌放到第1位,记录移动次数b
③比较a、b的大小关系,把小的移到大的那个位置上
min(a,b)就是最小代价

#列表p存放每一张纸牌的位置
p = [int(i) for i in input().split()]

a,b = 0,0
for i in p:
    if i%2==0:
        a += 1#所有偶数位置的纸牌放一起
    else:
        b += 1#所有奇数数位置的纸牌放一起
#最后,a是偶数位纸牌的数量,b是奇数位纸牌的数量
print(min(a,b))

    

参考博客:https://blog.youkuaiyun.com/diamondwang2012/article/details/132877135

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值