原题链接:蓝桥杯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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复