蓝桥2020B组D题(模拟)

问题描述

附件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“所在的行都在第一行中循环两次。
从“REPEAT6:”所在的行到”A=A+7“所在的行都在”REPEAT 5:“中循环。
”A=A+5“实际执行的次数是2x5x6=60次。
请问该程序执行完后A的值是多少?

参考答案

241830

解析

该程序是典型的程序模拟题目,但这个模拟比较复杂,下面首先看一下如何手算本题,
计算过程如下:
2x[4+5x(6x5+7)+8]+9
=2x4+2x5x6x5+2x5x7+2x8+9
=403
这里关键是看式子2x4+2x5x6x5+2x5x7+2x8+9。
该式子一共有五项,每项均由以下两部分组成。
(1)循环次数
循环次数分别是2、2x5x6、2x5、2、1.该循环次数的计算可以根据循环的层次决定,即循环控制范围的缩进,缩进越多,层次越多,循环次数就越多,缩进越少,层次越少,循环次数就越少。
(2)数值项
数值项为4,5,7,8,9,只有在碰到”A=A+4“这样的语句时,才需要将数值项乘以当前循环次数,累加到总的结果中即可计算出总的数据。
【参考程序】

#include<iostream>
using namespace std;
const int N=100;
string str;
int level[N];
int stack[N];
int top=0;
int main()
{
int space=0;
int cnum=1;
int ans=0;
level[0]=-1,stack[0]=1;
freopen(”prog.txt","r",stdin);
getline(cin,str);
while(getline(cin,str))
{
int len=str.size();
space=0;
while(str[space]==' ')
space++;
while(space<=level[top])
cnum/=stack[top--];
if(str[len-1]==':')
{
int k=str[len-2]-'0';
cnum*=k;
top++;
level[top]=space;
stack[top]=k;
}
else
{int k=str[len-1]-'0';
ans+=cnum*k;
}
}
cout<<ans<<endl;
return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值