博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法笔记_209:第六届蓝桥杯软件类决赛部分真题(Java语言B组)
阅读量:6079 次
发布时间:2019-06-20

本文共 8109 字,大约阅读时间需要 27 分钟。

目录

 

 

 前言:以下代码仅供参考,若有错误欢迎指正哦~


1 分机号

标题:分机号X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位。比如:751,520,321 都满足要求,而,766,918,201 就不符合要求。现在请你计算一下,按照这样的规定,一共有多少个可用的3位分机号码?请直接提交该数字,不要填写任何多余的内容。答案:120

 

1 public class Main { 2      3     public static void main(String[] args) { 4         int count = 0; 5         for(int a = 0;a < 10;a++) 6             for(int b = 0;b < 10;b++) 7                 for(int c = 0;c < 10;c++) 8                     if(a > b && b > c) 9                         count++;10         System.out.println(count);11     }12 }

 

 

 

 

 


2 五星填数

标题:五星填数如【图1.png】的五星图案节点填上数字:1~12,除去7和11。要求每条直线上数字和相等。如图就是恰当的填法。请你利用计算机搜索所有可能的填法有多少种。注意:旋转或镜像后相同的算同一种填法。请提交表示方案数目的整数,不要填写任何其它内容。答案:12

 

                                 图1

 

1 public class Main { 2     public static int count = 0; 3      4     public void swap(int[] A, int i, int j) { 5         int temp = A[i]; 6         A[i] = A[j]; 7         A[j] = temp; 8     } 9     10     public void check(int[] A) {11         int sum1 = A[0] + A[2] + A[5] + A[8];12         int sum2 = A[0] + A[3] + A[6] + A[9];13         int sum3 = A[1] + A[2] + A[3] + A[4];14         int sum4 = A[1] + A[5] + A[7] + A[9];15         int sum5 = A[4] + A[6] + A[7] + A[8];16         if(sum1 == sum2 && sum1 == sum3 && sum1 == sum4 && sum1 == sum5) {17             count++;18         } else19             return;20     }21     22     public void dfs(int[] A, int step) {23         if(step == A.length) {24             check(A);25             return;26         } else {27             for(int i = step;i < A.length;i++) {28                 swap(A, i, step);29                 dfs(A, step + 1);30                 swap(A, i, step);31             }32         }33     }34     35     public static void main(String[] args) {36         Main test = new Main();37         int[] A = {1,2,3,4,5,6,8,9,10,12};38         test.dfs(A, 0);39         System.out.println(count / 10);40     }41 }

 

 

 

 

 


3 表格计算

标题:表格计算某次无聊中, atm 发现了一个很老的程序。这个程序的功能类似于 Excel ,它对一个表格进行操作。不妨设表格有 n 行,每行有 m 个格子。每个格子的内容可以是一个正整数,也可以是一个公式。公式包括三种:1. SUM(x1,y1:x2,y2) 表示求左上角是第 x1 行第 y1 个格子,右下角是第 x2 行第 y2 个格子这个矩形内所有格子的值的和。2. AVG(x1,y1:x2,y2) 表示求左上角是第 x1 行第 y1 个格子,右下角是第 x2 行第 y2 个格子这个矩形内所有格子的值的平均数。3. STD(x1,y1:x2,y2) 表示求左上角是第 x1 行第 y1 个格子,右下角是第 x2 行第 y2 个格子这个矩形内所有格子的值的标准差。标准差即为方差的平方根。方差就是:每个数据与平均值的差的平方的平均值,用来衡量单个数据离开平均数的程度。公式都不会出现嵌套。如果这个格子内是一个数,则这个格子的值等于这个数,否则这个格子的值等于格子公式求值结果。输入这个表格后,程序会输出每个格子的值。atm 觉得这个程序很好玩,他也想实现一下这个程序。「输入格式」第一行两个数 n, m 。接下来 n 行输入一个表格。每行 m 个由空格隔开的字符串,分别表示对应格子的内容。输入保证不会出现循环依赖的情况,即不会出现两个格子 a 和 b 使得 a 的值依赖 b 的值且 b 的值依赖 a 的值。「输出格式」输出一个表格,共 n 行,每行 m 个保留两位小数的实数。数据保证不会有格子的值超过 1e6 。「样例输入」3 21 SUM(2,1:3,1)2 AVG(1,1:1,2)SUM(1,1:2,1) STD(1,1:2,2)「样例输出」1.00 5.002.00 3.003.00 1.48「数据范围」对于 30% 的数据,满足: n, m <= 5对于 100% 的数据,满足: n, m <= 50资源约定:峰值内存消耗(含虚拟机) < 512MCPU消耗  < 2000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。注意:主类的名字必须是:Main,否则按无效代码处理。
1 import java.util.ArrayList;  2 import java.util.Scanner;  3   4 public class Main {  5     public static int n, m;  6     public static double[][] value;  7       8     public double getSum(int x1, int y1, int x2, int y2) {  9         double sum = 0; 10         for(int i = x1;i <= x2;i++) 11             for(int j = y1;j <= y2;j++) 12                 sum = sum + value[i][j]; 13         return sum; 14     } 15      16     public double getAvg(int x1, int y1, int x2, int y2) { 17         int count = Math.abs((x2 - x1 + 1) * (y2 - y1 + 1)); 18         double avg = getSum(x1, y1, x2, y2) / count; 19         return avg; 20     } 21      22     public double getStd(int x1, int y1, int x2, int y2) { 23         int count = Math.abs((x2 - x1 + 1) * (y2 - y1 + 1)); 24         double avg = getAvg(x1, y1, x2, y2); 25         double result = 0; 26         for(int i = x1;i <= x2;i++) 27             for(int j = y1;j <= y2;j++) 28                 result = result + (value[i][j]-avg) * (value[i][j]-avg); 29         result = Math.sqrt(result / count); 30         return result; 31     } 32      33     public boolean check(int x1, int y1, int x2, int y2) { 34         boolean judge = true; 35         for(int i = x1;i <= x2;i++) { 36             if(!judge) 37                 break; 38             for(int j = y2;j <= y2;j++) { 39                 if(value[i][j] == -1) { 40                     judge = false; 41                     break; 42                 } 43             } 44         } 45         return judge; 46     } 47      48     public String[] getOperaAndNum(String arrayA) { 49         int p = arrayA.indexOf("("); 50         int q = arrayA.indexOf(")"); 51         String opera = arrayA.substring(0, p); 52         arrayA = arrayA.replace(':', ','); 53         String[] num = arrayA.substring(p+1, q).split(","); 54         String[] result = new String[5]; 55         result[0] = opera; 56         for(int i = 0;i < 4;i++) 57             result[i + 1] = num[i]; 58         return result; 59     } 60      61     public void getResult(String[] A) { 62         value = new double[n][m]; 63         ArrayList
list = new ArrayList
(); 64 for(int i = 0;i < n;i++) 65 for(int j = 0;j < m;j++) 66 value[i][j] = -1; 67 for(int i = 0;i < A.length;i++) { 68 String[] arrayA = A[i].split(" "); 69 for(int j = 0;j < arrayA.length;j++) { 70 if(arrayA[j].charAt(0) >= '0' && arrayA[j].charAt(0) <= '9') { 71 value[i][j] = Double.valueOf(arrayA[j]); 72 } else { 73 String[] r = getOperaAndNum(arrayA[j]); 74 String opera = r[0]; 75 int x1 = Integer.valueOf(r[1]) - 1; 76 int y1 = Integer.valueOf(r[2]) - 1; 77 int x2 = Integer.valueOf(r[3]) - 1; 78 int y2 = Integer.valueOf(r[4]) - 1; 79 if(check(x1, y1, x2, y2) == false) { 80 list.add(""+i+" "+j+" "+arrayA[j]); 81 continue; 82 } 83 if(opera.equals("SUM")) 84 value[i][j] = getSum(x1, y1, x2, y2); 85 else if(opera.equals("AVG")) 86 value[i][j] = getAvg(x1, y1, x2, y2); 87 else if(opera.equals("STD")) 88 value[i][j] = getStd(x1, y1, x2, y2); 89 } 90 } 91 } 92 93 while(!list.isEmpty()) { 94 for(int i = list.size() - 1;i >= 0;i--) { 95 String[] temp = list.get(i).split(" "); 96 int a = Integer.valueOf(temp[0]); 97 int b = Integer.valueOf(temp[1]); 98 String[] r = getOperaAndNum(temp[2]); 99 String opera = r[0];100 int x1 = Integer.valueOf(r[1]) - 1;101 int y1 = Integer.valueOf(r[2]) - 1;102 int x2 = Integer.valueOf(r[3]) - 1;103 int y2 = Integer.valueOf(r[4]) - 1;104 if(check(x1, y1, x2, y2) == false) 105 continue;106 if(opera.equals("SUM"))107 value[a][b] = getSum(x1, y1, x2, y2);108 else if(opera.equals("AVG"))109 value[a][b] = getAvg(x1, y1, x2, y2);110 else if(opera.equals("STD"))111 value[a][b] = getStd(x1, y1, x2, y2);112 list.remove(i);113 }114 }115 for(int i = 0;i < n;i++) {116 for(int j = 0;j < m;j++) {117 System.out.printf("%.2f", value[i][j]);118 if(j != m - 1)119 System.out.print(" ");120 }121 System.out.println();122 }123 }124 125 public static void main(String[] args) {126 Main test = new Main();127 Scanner in = new Scanner(System.in);128 n = in.nextInt();129 m = in.nextInt();130 in.nextLine();131 String[] A = new String[n];132 for(int i = 0;i < n;i++)133 A[i] = in.nextLine();134 test.getResult(A);135 }136 }

 

转载地址:http://avhgx.baihongyu.com/

你可能感兴趣的文章
NLB网路负载均衡管理器详解
查看>>
水平添加滚动条
查看>>
PHP中”单例模式“实例讲解
查看>>
VS2008查看dll导出函数
查看>>
VM EBS R12迁移,启动APTier . AutoConfig错误
查看>>
atitit.细节决定成败的适合情形与缺点
查看>>
Mysql利用binlog恢复数据
查看>>
我的友情链接
查看>>
用yum安装mariadb
查看>>
一点IT"边缘化"的人的思考
查看>>
WPF 降低.net framework到4.0
查看>>
搭建一个通用的脚手架
查看>>
开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
查看>>
开源磁盘加密软件VeraCrypt教程
查看>>
本地vs云:大数据厮杀的最终幸存者会是谁?
查看>>
阿里云公共镜像、自定义镜像、共享镜像和镜像市场的区别 ...
查看>>
shadowtunnel v1.7 发布:新增上级负载均衡支持独立密码
查看>>
Java线程:什么是线程
查看>>
mysql5.7 创建一个超级管理员
查看>>
【框架整合】Maven-SpringMVC3.X+Spring3.X+MyBatis3-日志、JSON解析、表关联查询等均已配置好...
查看>>