“梦想杯”2017 年江苏省信息与未来小学生夏令营 IT 小能手 PK 之程序设计试题

2017年

试题中使用的生成数列 R 定义如下:整数 0 R 1 < 201701 在输入中给出。对于
i > 1
R i = ( R i 1 × 6807 + 2831)
mod 201701
1 龟兔赛跑 (15 )
兔子又来找乌龟赛跑啦!同样的错误兔子不会犯两
次,所以兔子提出赛跑的时候,乌龟就觉得这场比赛很
不公平。于是兔子进一步放宽了条件,表示他可以在比
赛开始以后先睡 t 分钟再开始追乌龟。
乌龟这下没办法确定比赛到底公平不公平了,所以
请你来帮忙。假设乌龟每分钟可以跑 x 米,兔子每分
钟跑 y ( x < y ) 。他希望你计算最大的整数赛跑距离
( ) ,满足乌龟能在兔子先睡 t 分钟的前提下,比兔子
更早或同时到达终点。
输入 三个整数 x , y , t
输出 一个整数,表示要求的最长赛跑距离
样例输入 11, 21, 7
样例输出 161
数据规模
1 x < y 100 , t 1000
2 密码锁 (15 )
乌龟给自己的贵重物品上
了密码锁。密码锁上有 5 个数
字拨盘。每个数字拨盘每次向
上拨使数字增加 1 (9 向上拨得
0) ,向下拨使数字减少 1 (0
向下拨得到 9)
拨盘上的数字组成一个 5
位数。只要拨盘上的数字变为素数,密码锁就会被解
开。素数 ( 又称质数 ) 是只能被 1 和它自身整除的大于
1 的自然数。因为乌龟动作实在太慢,他希望你帮他计
算如何开锁,使得拨动的总次数最少。
输入
一个 5 位数,表示拨盘的初始数字
输出 一个 5 位素数,表示开启密码锁使用的素数
( 拨动次数最少 ) 。如有多组解,输出满足条件的最大数
样例输入 01210
样例输出 01319

 

3 房屋积水 (15 )
乌龟家的屋顶是凹凸不平的,所以每次雨后都会积
水。为了知道屋顶是否会在暴雨后塌掉,他把屋顶的形
状给了你,希望你帮他计算暴雨后屋顶的积水总量。
乌龟的屋顶由顺次排在同一水平线上的 n 个宽度
1 、高度为整数 ( 分别给出 ) 的瓦片组成。例如给定
n = 5 ,瓦片的高度分别为 4, 2, 3, 5, 1 ,屋顶可以画在
下图所示的网格中,灰色格子为瓦片。
暴雨过后,如果一个方格向左右两
侧延伸都能到达瓦片占据的方格,它就
会积水。所以图中波浪线格子在暴雨后
会积水,屋顶的积水方格总数为 3
输入 两个整数 n , R 1 ,表示屋顶
的宽度和生成数列的首项。从左向右数第 i ( 1 i n )
个瓦片的高度 a i = R i mod 10
输出 一个整数,表示暴雨后屋顶积水方格的总数
样例输入 10, 1
样例输出 23
数据规模 1 n 100
4 任务调度 (15 )
乌龟因为动作太慢,有 n 个任务已经超过截止日期
了。乌龟处理第 i 个任务需要 a i 单位时间。从 0 时刻
开始,乌龟可以选择某项任务,完成它,然后再开始另
一项任务,如此往复直到所有任务都被完成。
由于已经超过截止日期,乌龟会为此受到一定的惩
罚,惩罚值等于所有任务完成时刻之和。例如,有 2
任务分别需要 10 20 单位时间完成。如果先完成任
1 ,惩罚值为 10 + 30 = 40 ;如果先完成任务 2 ,惩
罚值为 20 + 30 = 50
乌龟希望你求出惩罚值最小的完成任务的顺序。
输入 两个整数 n , R 1 ,表示任务的数量和生成数
列的首项。处理任务 i ( 1 i n ) 的时间 a i = ( R i
mod 100) + 1
输出 一个整数,表示完成所有任务的最小惩罚值
样例输入 10, 2
样例输出 1641
数据规模
1 n 1000
5 基因组分析 (20 )
乌龟得到了他的基因组,一个只包含“ ATCG ”四
种字母的字符串。乌龟想起科学家说,基因组中很多片
段都多次重复出现,而且这种重复是很有意义的,于是
他想计算一下自己基因组里片段的重复情况。
给定一个基因组,其中一个长度为 k 的子串称为一
个“ k - 片段”。乌龟希望你计算出基因组中不同的 k -
段数量。例如,基因组 “TACAC” 2 - 片段有 “TA”,
“AC”, “CA”, “AC” ,其中不同的片段数量有 3 个。
输入 整数 n , k , R 1 ,表示基因组的长度、片段的
长度和数列生成的首项。基因组第 i ( 1
i
n ) 个字
符在 R i mod 4 的值为 0, 1, 2, 3 时分别为
A, T, C, G
输出 一个整数,表示不同的 k - 片段的数量
样例输入 20, 2, 37
样例输出 10
数据规模 30% 的数据满足 n 100 ; 100% 的数据
满足 1 n 10 5 , 1 k 10
6 加强版密码锁 (20 )
乌龟偶然获得了一个宝箱,宝箱上又有一把密码锁。
密码锁由 n 个拨盘组成,每个拨盘初始时有一个 0
99 之间的整数。向上拨使数字 x 变为 ( x + 1) mod 100
向下拨使数字 x 变为 ( x + 99) mod 100
因为密码锁年久失修,拨盘拨动的次数越多越费力。
如果一个拨盘被拨动 k 次,需要花费 k 2 单位时间。
密码锁只有在所有的拨盘上的数字形成一个从左到
右严格递增的数列时才会解开。乌龟再次请你帮忙,求
解解开密码锁的最少时间。
入 两个整数 n , R 1 ,表示拨盘的数量和数列生
成的首项。从左向右数第 i ( 1 i n ) 个拨盘的初始
数字为 R i mod 100
输出 一个整数,表示解开密码锁的最少时间
样例输入 10, 4
样例输出 3338
数据规模
30 % 的数据满足 n 3 ,所有数据满足
1 n 100
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的 Python 程序,用于计算两个数字的和,并通过 GUI 窗口化显示结果。 ```python import tkinter as tk root = tk.Tk() root.title("计算小能手") num1_label = tk.Label(root, text="第一个数字:") num1_label.grid(row=0, column=0) num1_entry = tk.Entry(root) num1_entry.grid(row=0, column=1) num2_label = tk.Label(root, text="第二个数字:") num2_label.grid(row=1, column=0) num2_entry = tk.Entry(root) num2_entry.grid(row=1, column=1) result_label = tk.Label(root, text="") result_label.grid(row=2, column=0, columnspan=2) def calculate(): try: num1 = float(num1_entry.get()) num2 = float(num2_entry.get()) result = num1 + num2 result_label.config(text="结果:%.2f" % result) except ValueError: result_label.config(text="请输入数字!") calculate_button = tk.Button(root, text="计算", command=calculate) calculate_button.grid(row=3, column=0, columnspan=2) root.mainloop() ``` 该程序使用了 tkinter 模块,它是 Python 的标准 GUI 库。在程序中,我们创建了一个窗口并设置了标题。然后,我们创建了三个标签和两个输入框,用于输入两个数字。我们还创建了一个标签,用于显示计算结果。 我们还创建了一个函数 calculate(),用于计算两个数字的和并更新结果标签的文本。该函数首先尝试从输入框中获取两个数字,并将它们相加。如果输入的内容不是数字,它会抛出 ValueError 异常。在这种情况下,我们更新结果标签的文本,以提示用户输入数字。 最后,我们创建了一个“计算”按钮,当用户点击它时,程序将调用 calculate() 函数计算结果并更新结果标签的文本。我们将按钮放置在最后一行,并将其跨越两列。最后,我们调用 mainloop() 函数,使程序进入事件循环,并等待用户与窗口交互。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值