题目:数字三角形
题目思路:观察发现,行数为奇数时,为了符合 左下走的次数与右下走的次数相等, 该路径最后一定是走到 行中间, 行数为偶数时,一定是最中间的两个进行比较大小即可。
map(function, iterable, …)为迭代器,不可计算它的长度,但可以进行list()转换,进而进行输出
N = int(input())
w = [list(map(int, input().split())) for i in range(N)]
for i in range(1, N):
for j in range(i+1):
if j == 0: #最左边的数一定是右上的数进行相加
w[i][j] += w[i-1][j]
elif i == j: #最右边的数一定是左上的数进行相加
w[i][j] += w[i-1][j-1]
else: #其他进行 上一行比较最大值
w[i][j] += max(w[i-1][j], w[i-1][j-1])
if N % 2 != 0:
print(w[N-1][N//2])
else:
print(max(w[N-1][N//2-1], w[N-1][N//2]))
题目: 内存空间
题目描述
小蓝最近总喜欢计算自己的代码中定义的变量占用了多少内存空间。
为了简化问题,变量的类型只有以下三种:
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。
题目要求:该题考察对字符串的操作,若会利用正则表达式,这道题应该更简单。难点在于考察String,int【】,long【】,怎么才能取到他们中括号里面的值或者引号里面的值?
# int a=1,b=5,c=4;
# String s2="hello",s3="world";
# int[] a1=new int[10],a2=new int[10];
# long[] a1=new long[10],a2=new long[10];
T = int(input())
B = 0
for _ in range(T):
flag = False
line = input().replace(';', '')
# startswith str.startswith("suffix", start, end)
# startswith 用于判断字符串中某段字符串是否以指定字符或子字符串结尾。
# startswith 返回值为布尔类型(True,False).
if line.startswith('int '):
B = line.count('=') * 4
if line.startswith('long '):
B = line.count('=') * 8
if line.startswith('String'):
for char in line:
if char == '\"' or char == '“': # \为转义字符识别英文的"
flag = not flag
if flag and char != '\"' and char != '“':
B += 1
if line.startswith('int[]'):
line = line.replace('int[]', '')
line_list = line.split(',')
for i in line_list:
num_str = ''
flag_2 = False
for char in i:
if char == '[':
flag_2 = True
if flag_2:
num_str += char
if char == ']':
break
B += int(num_str[1:-1]) * 4 # [1:-1]为取中括号里面的值,num_str的值为[_]
if line.startswith('long[]'):
line = line.replace('long[]', '')
line_list = line.split(',')
for i in line_list:
num_str = ''
flag_3 = False
for char in i:
if char == '[':
flag_3 = True
if flag_3:
num_str += char
if char == ']':
break
B += int(num_str[1:-1]) * 8
GB = B // 1024 // 1024 // 1024 # 注意为什么这里最后要用//, 而不是%
MB = B // 1024 // 1024 % 1024
KB = B // 1024 % 1024
b = B % 1024
if GB != 0:
print(GB, end='')
print('GB', end='')
if MB != 0:
print(MB, end='')
print('MB', end='')
if KB != 0:
print(KB, end='')
print('KB', end='')
if b != 0:
print(b, end='')
print('B', end='')
本文题解皆有借鉴他人之处,供自己及大家学习,如有侵权,请联系删除!