第十一届蓝桥杯省赛C/C++大学B组 第一场
大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客
本文原创为亓官劼,请大家支持原创,部分平台一直在盗取博主的文章!!!
博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客
试题 E: 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 的值是多少?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题E 题解
这题附件中的完整程序在:试题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