解题思路:
递归调用。

①首先对表格中所有值转化为浮点型,当转化不成功是,我们知道这处表格是一个字符串。然后调用字符串处理函数

②调用字符串处理函数的过程和①类似,先将数字转化成浮点型,然后进行计算,转化不成功时,我们知道此处又是一个字符串,那么再次调用字符串处理函数,这样我们就能够按照顺序计算出字符串的值,最后进行输出。


这个问题的难点在于,表格中有字符串时,我们并不知道字符串的调用顺序,拿题目中的例子来说,设二维数组的名字为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.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论