美文网首页
lanqiao2020省赛D题REPEAT 程序|文件读取|字符

lanqiao2020省赛D题REPEAT 程序|文件读取|字符

作者: 讲故事的万物 | 来源:发表于2021-03-01 18:47 被阅读0次

问题描述

本题总分: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 的值是多少?

解析

通过堆栈的方式,用两个数组,一个维护当前行前空格数量用来判断进入新的循环,一个维护当前层次的添加的循环数量。逐行判断,通过冒号判定repeat语句或计算语句,repeat则增加层次并且记录当前倍数,计算语句则直接通过当前倍数和当前行数据对答案计算;通过当前行空格数量与前一行空格数量判断是否减少层次,减少层次通过当前倍数和当前层次添加的循环数量计算减少层次后的倍数,并且对层次减一。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;

const int MAXN=2020;
char s[MAXN];//读取文件
int a[MAXN],b[MAXN];//分别维护当前各层次前空格数量和当前层次增加循环数。
int w;//维护当前行倍数。

int main() {
    freopen("prog.txt", "r", stdin);
    int pos = 0, ans = 0, w = 1;
    gets(s); // 读走第一行的 A = 0
    a[pos] = -1, b[pos] = 1; // 防止在栈空的时候弹栈
    while (gets(s)) {
        int n = strlen(s), p = 0;
        while (s[p] == ' ') 
            p++; // 统计缩进
        while (a[pos] >= p) 
            w /= b[pos--];// 弹掉栈里缩进大于等于当前行的
        if (s[n - 1] == ':') { // 当前行是循环,压栈
            int k = s[n - 2] - '0';
            pos = pos + 1;
            w *= k;
            a[pos] = p, b[pos] = k;
        } else {
            int k = s[n - 1] - '0';
            ans += k * w;
        }
    }
    printf("%d\n", ans);
    return 0;
}

相关文章

  • lanqiao2020省赛D题REPEAT 程序|文件读取|字符

    问题描述 本题总分:10 分附件 prog.txt 中是一个用某种语言写的程序。其中 REPEAT k 表示一个次...

  • 第7章 C控制语句:分支和跳转 题1

    题:编写一个程序。该程序读取输入直到遇到#字符,然后报告读取的空格数码、读取的换行符数目以及读取的所有其他字符数目。答:

  • FileReader 和 FileInputStream-02-

    FileReader 读取文件字符 FileInputStream读取文件字节 字符和字节的区别

  • Java IO之节点流(文件流)的使用

    文件字符流FileReader和FileWriter的使用 文件的输入 从文件中读取到内存(程序)中 步骤: 建立...

  • NLP文本分类学习系列(二)

    Task2 数据读取与数据分析 读取数据第一列为新闻的类别,第二列为新闻的字符。读取数据 数据洞察赛题数据中,新闻...

  • IO流java.util.Scanner

    从键盘读取 从字符串读取 从文件读取

  • 文件IO流

    从控制台读取输出字符从文件中写入读取字符从文件中写入读取字节文件夹操作 1. 从控制台读取输出字符 输入由Syst...

  • 字符串相关函数总结2

    fgets(字符指针,字符大小,文件结构体指针) 从文件结构体指针stream中读取数据,每次读取一行。读取的数据...

  • txt读写

    文件打开 读文件 读取字符串 按行读取整个文件 写文件 字符串写入txt 列表写入文件 双层列表写入文件 数组写入文件

  • PCH文件

    pch文件作用:程序在运行之前首先读取文件中的代码,可以在该文件中定义一些整个工程d都可以直接读取的符号 [图片上...

网友评论

      本文标题:lanqiao2020省赛D题REPEAT 程序|文件读取|字符

      本文链接:https://www.haomeiwen.com/subject/ekwafltx.html