C/C++蓝桥杯之REPEAT程序(较难)

问题描述:

附件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的值是多少?

答案:241830

分析:

该程序是典型的程序模拟题目,但是此题比较复杂,下面先看一下如何手算本题,计算过程如下:

先看最里面是:6*5+7=37

接着是:5*(6*5+7)+8=193

然后是:4+5*(6*5+7)+8=197

最后是:2*(4+5*(6*5+7)+8)+9=403

这里的关键是看式子:2*4+2*5*6*5+2*5*7+2*8+9

该式子一共有5项,每项均由以下两部分组成。

(1)循环次数

循环次数分别是:2,2*5*6,2*5,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 mnain()
{int space=0;//每行前面的空格数int cnum=1;//总循环数int ans=0;//结果level[0]=-1;stack[0]=1;freopen("prong.txt","r",stdin);//从文件中获取输入getline(cin,str);//首行数据A=0处理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]==':')//判断是否是REPEAT语句{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;
}

此题较难,小伙伴们能看懂就看吧,实在不行别强求! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java8 CompletableFuture异步编程-进阶篇

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前言 我们在前面文章讲解了CompletableFuture这个异步编程类的基本用法&#xff0c;…

Web Worker:JavaScript的后台任务解决方案

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Linux练习

作业要求&#xff1a; 自己安装linux环境&#xff0c;在每一个题目下贴执行命令和结果的截图 一、文件创建 1. 创建一个文件夹命名为mydir 2. 进入文件夹&#xff0c;创建一个文件&#xff0c;命名为myfile 3. 查看mydir文件夹下有哪些文件 答案获取&#xff1a; https:/…

SpringBoot项目没有启动按键

问题一&#xff1a; pom文件正常&#xff0c;但是springboot包报红&#xff0c;同时Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found报红 解决办法&#xff1a; 无法识别使用哪个版本的 spring-boot-maven-plugin 包 <build><plugins>&…

javase day01笔记

第一天课堂笔记 Java第三代高级语言中的面向对象的语言 b/s 浏览器/服务器c/s 客户端/服务端 1991年詹姆斯高斯林在sun公司开发的Java 常用的dos命令 磁盘操作系统&#xff1a;dos win &#xff0b; r -》 cmd dos命令 切换盘符&#xff1a;直接输入对应盘符目录操作&#x…

【排序算法】四个排序算法理论基础+Python代码:冒泡、插入、选择、快速排序

排序算法 排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 常见的内部排序算法有&#xff1a;插入排序、希尔排序…

【C++进阶】哈希的应用 --- 布隆过滤器

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

面试准备不充分,被Java守护线程干懵了,面试官主打一个东西没用但你得会

写在开头 面试官&#xff1a;小伙子请聊一聊Java中的精灵线程&#xff1f; 我&#xff1a;什么&#xff1f;精灵线程&#xff1f;啥时候精灵线程&#xff1f; 面试官&#xff1a;精灵线程没听过&#xff1f;那守护线程呢&#xff1f; 我&#xff1a;守护线程知道&#xff0c;就…

计算机软件文档编制规范GB_T 8567-2006

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 计算机软件文档编制规范概述 计算机软件文档编制规范&#xff08;Specification for computer software documentation&#xff09; 由TC28&#xff08;全国信息技术标准化技…

面试 Java 并发编程八股文十问十答第二期

面试 Java 并发编程八股文十问十答第二期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;形成死锁的四个必要…

《HTTPS协议》

文章目录 一、什么是HTTPS协议二、理解关键字三、为什么要加密四、常见的加密方式1.对称加密2.非对称加密 五、如何进行加密&#xff1f;1.只使用对称加密2.只使用非对称加密3.双方都使用非对称加密4.使用对称加密非对称加密5.对称加密非对称加密CA证书认证5.1数据摘要&#xf…

GPT-4-turbo还是大家心中第一!Claude 3竞技场人类投票成绩出炉:仅居第三

Claude 3的竞技场排名终于揭晓了&#xff1a; 在仅仅3天的时间里&#xff0c;20000张投票使得排名的流量达到了前所未有的高度。 最后&#xff0c;Claude 3的"大杯"模型Opus以1233的分数赢得了胜利&#xff0c;成为了第一个能和GPT-4-Turbo匹敌的选手。 "中杯…

Flink 资源管理

文章目录 前言ResourceManager详解Slot 管理器SlotProviderSlot资源池Slot共享Slot共享的优点Slot 共享组与 Slot 共享管理器Slot资源申请 总结 前言 在Flink中&#xff0c;资源管理是一个核心组件&#xff0c;它负责分配和管理计算资源&#xff0c;以确保任务能够高效、稳定地…

Python使用Beautiful Soup及解析html获取元素并提取内容值

Python使用Beautiful Soup及解析html获取元素并提取内容值 1. 包括解析获取标题2. 根据标签及id获取所有元素3. 根据标签及class获取所有元素4. 获取元素下的标签的值5. 获取元素下的parent及child的元素的值参考 1. 包括解析获取标题 2. 根据标签及id获取所有元素 3. 根据标…

QGridLayout网格布局和QVBoxLayout垂直布局有着非常大的差别

QGridLayout网格布局&#xff1a;1.把这块控件划分成一个个的 单元格 2.把你的控件填充进入 单元格 3.这些有关限制大小的函数接口统统失效 setMaximumWidth&#xff08;&#xff09; setMinimumWidth() setPolicySize()图示&#xff1a;我是用的网格布局&#xff0c;左边放QT…

C# WinForm AndtUI第三方库 Table控件使用记录

环境搭建 1.在NuGet中搜索AndtUI并下载至C# .NetFramework WinForm项目。 2.添加Table控件至窗体。 使用方法集合 1.单元格点击事件 获取被点击记录特定列内容 private void dgv_CellClick(object sender, MouseEventArgs args, object record, int rowIndex, int columnIn…

观察者模式:Java 中的一对多依赖关系解决方案

观察者模式是一种行为设计模式&#xff0c;用于定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于解耦发布者和订阅者&#xff0c;使得系统更易于扩展和维护。 使用条件 观察…

【Python】装饰器函数

专栏文章索引&#xff1a;Python 原文章&#xff1a;装饰器函数基础_装饰函数-CSDN博客 目录 1. 学习装饰器的基础 2.最简单的装饰器 3.闭包函数装饰器 4.装饰器将传入的函数中的值大写 5. 装饰器的好处 6. 多个装饰器的执行顺序 7. 装饰器传递参数 8. 结语 1. 学习装饰…

C/C++蓝桥杯之整除序列

问题描述&#xff1a;有一个序列&#xff0c;序列的第一个数是n&#xff0c;后面的每个数均是前一个数整除2的结果&#xff0c;请输出这个序列中值为正数的所有项。 输入格式&#xff1a;输入一行&#xff0c;包含一个整数n。 输出格式&#xff1a;输出一行&#xff0c;包含多…

利用IDEA创建Java项目使用Servlet工具

【文件】-【项目结构】 【模块】-【依赖】-【】-【JAR】 找到Tomcat的安装路径打开【lib】找到【servlet.jar】点击【确定】 勾选上jar,然后【应用】-【确定】 此时新建文件可以发现多了一个Servlet&#xff0c;我们点击会自动创建一个继承好的Servlet类