返回

C/C++描述 第十一届蓝桥杯省赛 C/C++ 大学B组 第一场(2020.7.5) 试题D REPEAT 程序 题解 题目+题解

发布时间:2023-07-27 02:53:38 237
# python


  大家好,我叫亓官劼(qí guān jié )


C/C++描述 第十一届蓝桥杯省赛 C/C++ 大学B组 第一场(2020.7.5) 试题D REPEAT 程序 题解 题目+题解_缩进


试题 D: REPEAT 程序

本题总分:10 分

【问题描述】

附件 prog.txt 中是一个用某种语言写的程序。

其中 REPEAT k 表示一个次数为 k 的循环。循环控制的范围由缩进表达,

从次行开始连续的缩进比该行多的(前面的空白更长的)为循环包含的内容。

例如如下片段:

REPEAT 2:

 A = A + 4

 REPEAT 5:

  REPEAT 6:

   A = A + 5

  A = A + 7

 A = A + 8

A = A + 9

该片段中从 A = A + 4 所在的行到 A = A + 8 所在的行都在第一行的

循环两次中。

REPEAT 6: 所在的行到 A = A + 7 所在的行都在 REPEAT 5: 循环中。

A = A + 5 实际总共的循环次数是 2 × 5 × 6 = 60 次。

请问该程序执行完毕之后,A 的值是多少?

【答案提交】

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个

整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

试题D 题解

这题附件中的完整程序在:​​试题D附件程序​​

这题是填空题,所以我们还是可以使用Python来进行处理,可以方便点,当前,C/C++也是可以的,这里提供一个Python版本的处理方法

dir = '/Users/qiguan/Downloads/C++大学B组/REPEAT程序.txt'
file = open(dir)
data = file.read()
len = data.__len__()


def get_indent(i):
now_indent = 0
while data[i] == ' ':
now_indent = now_indent + 1
i = i + 1
return now_indent, i


def get_flag(i):
if data[i] == 'R':
i = i + 7
return 1, i
if data[i] == 'A':
i = i + 8
return 2, i


# 当前处理中的行前缩进空格数
indent = 0
# 控制下标
i = 5
# A的值
A = 0
# 乘数
multiplier = 1
# 乘数 集合
multiplier_list = []
flag = 0
while i != len:
if data[i] == '\n':
i = i + 1
if i >= len -1:
break
now_indent, i = get_indent(i)
flag, i = get_flag(i)
if now_indent < indent:
multiplier /= multiplier_list[-1]
multiplier_list.pop()
if flag == 1:
multiplier *= int(data[i])
multiplier_list.append(int(data[i]))
i += 2
# A = A +
if flag == 2:
A += int(data[i])*multiplier
i += 1
indent = now_indent
print(A)

答案:​​241830​


特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线