解题思路:
递归调用。
①首先对表格中所有值转化为浮点型,当转化不成功是,我们知道这处表格是一个字符串。然后调用字符串处理函数
②调用字符串处理函数的过程和①类似,先将数字转化成浮点型,然后进行计算,转化不成功时,我们知道此处又是一个字符串,那么再次调用字符串处理函数,这样我们就能够按照顺序计算出字符串的值,最后进行输出。
这个问题的难点在于,表格中有字符串时,我们并不知道字符串的调用顺序,拿题目中的例子来说,设二维数组的名字为E
1 SUM(2,1:3,1)
2 AVG(1,1:1,2)
SUM(1,1:2,1) STD(1,1:2,2)
这里按照从上到下,从左到右将每一个表格转化为浮点数。
当我们将E[1][1]转化为浮点数时,成功。
当将E[1][2]转化为浮点数时,可知,转化不成功,然后我们对其进行处理计算。
处理E[2][1]时,成功。
当处理到E[3][1]时,我们发现又是一个字符串,此时我们递归调用对这个字符串进行处理。
E[1][1]和E[2][1]都能顺利的转化成浮点数。那么我们就计算出了E[3][1]。
从而我们也计算出了E[1][2]。
整体思路大概就是这样。
注意事项:
注意计算字符串时的第一行第一列在数组中是E[0][0]......
参考代码:
from math import sqrt def Sum(x1,y1,x2,y2): global E sum = 0 for i in range(x1-1,x2): for j in range(y1-1,y2): try: E[i][j] = float(E[i][j]) #转化为浮点数 except: x1 = int(E[i][j][4]) y1 = int(E[i][j][6]) x2 = int(E[i][j][8]) y2 = int(E[i][j][10]) if E[i][j][:3] == 'SUM': #对不同的公式进行处理 E[i][j] = Sum(x1,y1,x2,y2) elif E[i][j][:3] == 'AVG': E[i][j] = Sum(x1,y1,x2,y2)/((x2-x1+1)*(y2-y1+1)) elif E[i][j][:3] == 'STD': ave = Sum(x1,y1,x2,y2)/((x2-x1+1)*(y2-y1+1)) sum = 0 for i in (x1,x2+1): for j in range(y1,y2+1): sum = sum + (E[i][j]-ave)*(E[i][j]-ave) E[i][j] = sqrt(sum/((x2-x1+1)*(y2-y1+1))) sum = sum + float(E[i][j]) #进行计算 return sum def f(n,m): global E for i in range(n): for j in range(m): try: E[i][j] = float(E[i][j]) #转化为浮点数 except: x1 = int(E[i][j][4]) y1 = int(E[i][j][6]) x2 = int(E[i][j][8]) y2 = int(E[i][j][10]) if E[i][j][:3] == 'SUM': #对不同的公式进行处理 E[i][j] = Sum(x1,y1,x2,y2) elif E[i][j][:3] == 'AVG': E[i][j] = Sum(x1,y1,x2,y2)/((x2-x1+1)*(y2-y1+1)) elif E[i][j][:3] == 'STD': ave = Sum(x1,y1,x2,y2)/((x2-x1+1)*(y2-y1+1)) sum = 0 for k in range(x1-1,x2): for l in range(y1-1,y2): sum = sum + (E[k][l]-ave)*(E[k][l]-ave) E[i][j] = sqrt(sum/((x2-x1+1)*(y2-y1+1))) for i in range(n): for j in range(m): print('%.2f' % E[i][j],end=' ') print() if __name__ == '__main__': n,m = map(int,input().strip().split()) E = [[str(j) for j in input().strip().split()] for i in range(n)] f(n,m)
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复