原题链接:蓝桥杯2015年第六届真题-表格计算
解题思路:
注意事项:
参考代码:
import java.util.Scanner; public class T1832 { public static int[] getRange(String s){ int []a = {0,0,0,0,0}; s = s.substring(4, s.length()); Scanner sc = new Scanner(s); sc.useDelimiter("[,:)]"); for(int i = 1;i<=4;i++){ a[i] = sc.nextInt(); } sc.close(); return a; } public static double getValue(String [][]a,String s){ double ans =0.0; //求和 if(s.contains("U")){ int []t = getRange(s); for(int i_ = t[1];i_<=t[3];i_++){ for(int j_ = t[2];j_<=t[4];j_++){ ans += getValue(a,a[i_][j_]); } } } //求平均值 else if(s.contains("V")){ int []t = getRange(s); for(int i_ = t[1];i_<=t[3];i_++){ for(int j_ = t[2];j_<=t[4];j_++){ ans += getValue(a,a[i_][j_]); } } int n = (t[4]-t[2]+1)*(t[3]-t[1]+1); ans /= n; } //求标准差 else if(s.contains("T")){ int []t = getRange(s); int n = (t[4]-t[2]+1)*(t[3]-t[1]+1); double avg = 0; for(int i_ = t[1];i_<=t[3];i_++){ for(int j_ = t[2];j_<=t[4];j_++){ avg += getValue(a,a[i_][j_]); } } avg /= n; for(int i_ = t[1];i_<=t[3];i_++){ for(int j_ = t[2];j_<=t[4];j_++){ ans += (getValue(a,a[i_][j_]) - avg)*(getValue(a,a[i_][j_]) - avg); } } ans = Math.sqrt(ans/n); } else{ ans = Double.parseDouble(s); } return ans; } public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()){ int n = in.nextInt(),m = in.nextInt(); String [][]a = new String[n+1][m+1]; for(int i = 1;i<=n;i++){ for(int j = 1;j<=m;j++){ a[i][j] = in.next(); } } for(int i = 1;i<=n;i++){ for(int j = 1;j<m;j++){ System.out.printf("%.2f ",getValue(a,a[i][j])); } System.out.printf("%.2f%n",getValue(a,a[i][m])); } } in.close(); } }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复