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

  大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客

本文原创为亓官劼,请大家支持原创,部分平台一直在盗取博主的文章!!!

博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客


在这里插入图片描述


试题 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

你可能感兴趣的:(蓝桥杯)