解题思路:
递归调用。
①首先对表格中所有值转化为浮点型,当转化不成功是,我们知道这处表格是一个字符串。然后调用字符串处理函数
②调用字符串处理函数的过程和①类似,先将数字转化成浮点型,然后进行计算,转化不成功时,我们知道此处又是一个字符串,那么再次调用字符串处理函数,这样我们就能够按照顺序计算出字符串的值,最后进行输出。
这个问题的难点在于,表格中有字符串时,我们并不知道字符串的调用顺序,拿题目中的例子来说,设二维数组的名字为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语言程序设计教程(第三版)课后习题12.5 (C语言代码)浏览:875 |
淘淘的名单 (C语言代码)答案错误???浏览:624 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1072 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1015 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:548 |
【简单计算】 (C语言代码)浏览:642 |
1908题解浏览:680 |
川哥的吩咐 (C语言代码)浏览:663 |
勾股数 (C语言代码)浏览:830 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:465 |