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列,并换行

【运行结果】

物联沃分享整理
物联沃-IOTWORD物联网 » 2023年12月GESP Python一、二级编程题详细解析

发表评论