Dotcpp  >  编程题库  >  蓝桥杯2022年第十三届决赛真题-内存空间(C/C++/Java组)
题目 2702:

蓝桥杯2022年第十三届决赛真题-内存空间(C/C++/Java组)

时间限制: 3s 内存限制: 512MB 提交: 1456 解决: 284

题目描述

小蓝最近总喜欢计算自己的代码中定义的变量占用了多少内存空间。

为了简化问题,变量的类型只有以下三种:

int:整型变量,一个 int 型变量占用 4 Byte 的内存空间。

long:长整型变量,一个 long 型变量占用 8 Byte 的内存空间。

String:字符串变量,占用空间和字符串长度有关,设字符串长度为 L,则字符串占用 L Byte 的内存空间,如果字符串长度为 0 则占用 0 Byte 的内存空间。

定义变量的语句只有两种形式,第一种形式为:

type var1=value1,var2=value2…;

定义了若干个 type 类型变量 var1、var2…,并且用 value1、value2 …初始化,

多个变量之间用’,’ 分隔,语句以’;’ 结尾,type 可能是 int、long 或 String。例如 int a=1,b=5,c=6; 占用空间为 12 Byte;long a=1,b=5; 占用空间为 16 Byte;String s1=””,s2=”hello”,s3=”world”; 占用空间为 10 Byte。

第二种形式为:

type[] arr1=new type[size1],arr2=new type[size2]…;

定义了若干 type 类型的一维数组变量 arr1、arr2…,且数组的大小为 size1、size2…,多个变量之间用’,’ 进行分隔,语句以’;’ 结尾,type 只可能是 int 或 long。例如 int[] a1=new int[10]; 占用的内存空间为 40 Byte;long[] a1=new long[10],a2=new long[10]; 占用的内存空间为 160 Byte。

已知小蓝有 T 条定义变量的语句,请你帮他统计下一共占用了多少内存空间。结果的表示方式为:aGBbMBcKBdB,其中 a、b、c、d 为统计的结果,GB、MB、KB、B 为单位。优先用大的单位来表示,1GB=1024MB, 1MB=1024KB,1KB=1024B,其中 B 表示 Byte。如果 a、b、c、d 中的某几个数字为 0,那么不必输出这几个数字及其单位。题目保证一行中只有一句定义变量的语句,且每条语句都满足题干中描述的定义格式,所有的变量名都是合法的且均不重复。题目中的数据很规整,和上述给出的例子类似,除了类型后面有一个空格,以及定义数组时 new 后面的一个空格之外,不会出现多余的空格。

输入格式

输入的第一行包含一个整数 T ,表示有 T 句变量定义的语句。

接下来 T 行,每行包含一句变量定义语句。

输出格式

输出一行包含一个字符串,表示所有语句所占用空间的总大小。

样例输入

1
long[] nums=new long[131072];

样例输出

1MB

提示

样例 1,占用的空间为 131072 × 8 = 1048576 B,换算过后正好是 1MB,其它三个单位 GB、KB、B 前面的数字都为 0 ,所以不用输出。 

样例 2,占用的空间为 4 × 2 + 8 × 2 + 10 + 8 × 100000 × 2 B,换算后是 1MB538KB546B。

对于所有评测用例,1 ≤ T ≤ 10,每条变量定义语句的长度不会超过 1000 。所有的变量名称长度不会超过 10,且都由小写字母和数字组成。对于整型变量,初始化的值均是在其表示范围内的十进制整数,初始化的值不会是变量。 对于 String 类型的变量,初始化的内容长度不会超过 50,且内容仅包含小写字母和数字,初始化的值不会是变量。对于数组类型变量,数组的长度为一个 整数,范围为:[0, 230],数组的长度不会是变量。T 条语句定义的变量所占的内存空间总大小不会超过 1 GB,且大于 0 B。

本试题适用于用c/c++/java代码来完成,如用Python代码出现时间超限问题建议转到:https://www.dotcpp.com/oj/problem2736.html链接

标签