2023年12月GESP Python一、二级编程题真题解析
一、2023年12月GESP Python一级编程题
【一级编程题?1】
【试题名称】:小杨的考试
【问题描述】
今天是星期X,小杨还有N天就要考试了,你能推算出小杨考试那天是星期几吗?(本题中使用7表示星期日)
【输入描述】
输入2行,第一行一个整数X(1≤X≤7);第二行一个整数N(1≤N≤364。
【输出描述】
输出一个整数,表示小杨考试那天是星期几。
【分析】
因为星期是以7天为周期,所以星期几,可以是(起始星期几+相隔天数)/7的余数,可以用取模运算(%),但%7的结果为0~6,7%7=0,因此需先将X-1,这样其值为0~6,加相隔天数后%7,然后再加1,将0~6还原为1~7。
【完整程序】
x = int(input()) # 输入当天星期x,1≤x≤7
n = int(input()) # 输入n,隔n天考试
print((x - 1 + n) % 7 + 1)
【运行结果】
【一级编程题2】
【试题名称】:小杨报数
【问题描述】
小杨需要从1到N报数。在报数过程中,小杨希望跳过M的倍数。例如,如果N=5,M=2,那么小杨就需要依次报出 1、3、5。
现在,请你依次输出小杨报的数。
【输入描述】
输入 2 行,第一行一个整数N(1≤N≤1,000);第二行一个整数M(2≤M≤100)。
【输出描述】
输出若干行,依次表示小杨报的数。
【分析】
因为报数从1开始到N,跳过M的倍数,所以报数为不能被M整除的数。
【完整程序】
n = int(input()) # 输入n,1≤n≤1,000
m = int(input()) # 输入m(2≤m≤100)
for i in range(1, n+1):
if i % m: # 也可写成if i % m != 0
print(i)
【运行结果】
二、2023年12月GESP Python二级编程题
【二级编程题1】
【试题名称】:小杨做题
【问题描述】
为了准备考试,小杨每天都要做题。第1天,小杨做了a道题;第2天,小杨做了b道题;从第3天起,小杨每天做的题目数量是前两天的总和。
此外,小杨还规定,当自己某一天做了大于或等于m题时,接下来的所有日子里,他就再也不做题了。
请问,到了第N天,小杨总共做了多少题呢?
【输入描述】
总共4行。第一行一个整数a,第二行一个整数b,第三行一个整数m,第四行一个整数N。
保证0≤a,b≤10;a,b≤M≤1,000,000;3≤N≤364。
【输出描述】
一行一个整数,表示小杨N天里总共做了多少题目。
【分析】
此题计算除a,b初值不一定为1外,每天做题数计算与斐波那契数列计算类似。另,当某天做到m题时,则停止做题,到第n天即使当天没有做到m题也终止,求出累计做题数。
【完整程序】
a = int(input()) # 输入第1天做题数a
b = int(input()) # 输入第2天做题数b
m = int(input()) # 输入某天做题数为m时,不再做题(终止)
n = int(input()) # 输入第n天
ans = a + b # 前2天做题数
for i in range(3, n + 1): # 从第3天起,到第n天每天做题数
c = a + b # 求第i天做题数
ans += c # 加入总做题数
a = b # 更新a为新的前2天的做题数
b = c # 更新b为新的前1天的做题数
if c >= m: # 如果当天做数达到m,则终止循环(不再做题)
break
print(ans)
【运行结果】
【二级编程题2】
【试题名称】:小杨的H字矩阵
【问题描述】
小杨想要构造一个N×N的H字矩阵(N为奇数),具体来说,这个矩阵共有N行,每行N个字符,其中最左列、最右列都是|,而中间一行(即第(N+1)/2行)的第2~N-1个字符都是“-”,其余所有字符都是半角小写字母a。
请你帮小杨根据给定的N打印出对应的“H字矩阵”。
【输入描述】
一行一个整数N(5≤N≤49,保证N为奇数)。
【输出描述】
输出对应的“H字矩阵”。
请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出N行,每行除了换行符外恰好包含N个字符,这些字符要么是-,要么是|,要么是a。你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。
【分析】
如果行号从0起编,则正中间行的行号为int(N/2)。第1列和第N列都是“|”,第2到N-1列,正中间行输出(N-2)个“-”,其他行输出(N-2)个“a”。
【完整程序】
n = int(input()) # 输入n,为行数
for i in range(n): # 0≤i<n
print("|", end="") # 输出第1列(不换行)
if i == int(n/2): # 如是正中间行
print("-"*(n-2), end="") # 输出(n-2)个“-”
else:
print("a"*(n-2), end="") # 其他行输出(n-2)个“a”
????print("|")?????? #?输出第n列,并换行
【运行结果】
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!