• Java 蓝桥杯 模拟赛 题目(下)


    螺旋矩阵

    问题描述
      对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。
      例如,一个 4 行 5 列的螺旋矩阵如下:
      1 2 3 4 5
      14 15 16 17 6
      13 20 19 18 7
      12 11 10 9 8
    输入格式
      输入的第一行包含两个整数 n, m,分别表示螺旋矩阵的行数和列数。
      第二行包含两个整数 r, c,表示要求的行号和列号。
    输出格式
      输出一个整数,表示螺旋矩阵中第 r 行第 c 列的元素的值。
    样例输入
    4 5
    2 2
    样例输出
    15
    评测用例规模与约定
      对于 30% 的评测用例,2 <= n, m <= 20。
      对于 70% 的评测用例,2 <= n, m <= 100。
      对于所有评测用例,2 <= n, m <= 1000,1 <= r <= n,1 <= c <= m。

    import java.util.Scanner;
    
    public class _007{
        static int [][] array = new int [1000][1000];  //定义数组及大小
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();  //行数
            int m = sc.nextInt();  //列数
    
            int r1 = sc.nextInt();
            int c1 = sc.nextInt();
            int num = 0;
            int r = 1,c = 0;
            while(num != n * m) {
                while(c < m && array[r][c+1] == 0)
                    array[r][++c] = ++ num;
                while(r < n && array[r+1][c] == 0)
                    array[++r][c] = ++ num;
                while(c > 1 && array[r][c-1] == 0)
                    array[r][--c] = ++ num;
                while(r > 1 && array[r-1][c] == 0)
                    array[--r][c] = ++ num;
            }
            System.out.println(array[r1][c1]);
        }
    }
    

    摆动序列

    问题描述
      如果一个序列的奇数项都比前一项大,偶数项都比前一项小,则称为一个摆动序列。即 a[2i]<a[2i-1], a[2i+1]>a[2i]。
      小明想知道,长度为 m,每个数都是 1 到 n 之间的正整数的摆动序列一共有多少个。
    输入格式
      输入一行包含两个整数 m,n。
    输出格式
      输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。
    样例输入
    3 4
    样例输出
    14
    样例说明
      以下是符合要求的摆动序列:
      2 1 2
      2 1 3
      2 1 4
      3 1 2
      3 1 3
      3 1 4
      3 2 3
      3 2 4
      4 1 2
      4 1 3
      4 1 4
      4 2 3
      4 2 4
      4 3 4
    评测用例规模与约定
      对于 20% 的评测用例,1 <= n, m <= 5;
      对于 50% 的评测用例,1 <= n, m <= 10;
      对于 80% 的评测用例,1 <= n, m <= 100;
      对于所有评测用例,1 <= n, m <= 1000。

    public class _008 {
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int m = sc.nextInt();
            int n = sc.nextInt();
            int[][] ch =new int[m+2][n+2];
            for (int i =1 ; i <= n ;i++){
                ch[1][i]=n-i+1;
            }
            for(int i=2;i<=m;i++){
                if((i&1)==1){
                    for(int j=n;j>=1;j--)
                        ch[i][j]=(ch[i-1][j-1]+ch[i][j+1])%1000;
                }else{
                    for(int j=1;j<=n;j++)
                        ch[i][j]=(ch[i-1][j+1]+ch[i][j-1])%1000;
                }
            }
            int result= (m&1)==1? ch[m][1]:ch[m][n];
            System.out.println(result);
        }
    }
    

    户户通电

    问题描述
      2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。
      这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。
      现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。
      小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的平方,形式化描述为坐标为 (x_1, y_1) 高度为 h_1 的村庄与坐标为 (x_2, y_2) 高度为 h_2 的村庄之间连接的费用为
      sqrt((x_1-x_2)(x_1-x_2)+(y_1-y_2)(y_1-y_2))+(h_1-h_2)*(h_1-h_2)。
      在上式中 sqrt 表示取括号内的平方根。请注意括号的位置,高度的计算方式与横纵坐标的计算方式不同。
      由于经费有限,请帮助小明计算他至少要花费多少费用才能使这 n 个村庄都通电。
    输入格式
      输入的第一行包含一个整数 n ,表示村庄的数量。
      接下来 n 行,每个三个整数 x, y, h,分别表示一个村庄的横、纵坐标和高度,其中第一个村庄可以建立发电站。
    输出格式
      输出一行,包含一个实数,四舍五入保留 2 位小数,表示答案。
    样例输入
    4
    1 1 3
    9 9 7
    8 8 6
    4 5 4
    样例输出
    17.41
    评测用例规模与约定
      对于 30% 的评测用例,1 <= n <= 10;
      对于 60% 的评测用例,1 <= n <= 100;
      对于所有评测用例,1 <= n <= 1000,0 <= x, y, h <= 10000。

    待定。。。

    小明植树

    问题描述
      小明和朋友们一起去郊外植树,他们带了一些在自己实验室精心研究出的小树苗。
      小明和朋友们一共有 n 个人,他们经过精心挑选,在一块空地上每个人挑选了一个适合植树的位置,总共 n 个。他们准备把自己带的树苗都植下去。
      然而,他们遇到了一个困难:有的树苗比较大,而有的位置挨太近,导致两棵树植下去后会撞在一起。
      他们将树看成一个圆,圆心在他们找的位置上。如果两棵树对应的圆相交,这两棵树就不适合同时植下(相切不受影响),称为两棵树冲突。
      小明和朋友们决定先合计合计,只将其中的一部分树植下去,保证没有互相冲突的树。他们同时希望这些树所能覆盖的面积和(圆面积和)最大。
    输入格式
      输入的第一行包含一个整数 n ,表示人数,即准备植树的位置数。
      接下来 n 行,每行三个整数 x, y, r,表示一棵树在空地上的横、纵坐标和半径。
    输出格式
      输出一行包含一个整数,表示在不冲突下可以植树的面积和。由于每棵树的面积都是圆周率的整数倍,请输出答案除以圆周率后的值(应当是一个整数)。
    样例输入
    6
    1 1 2
    1 4 2
    1 7 2
    4 1 2
    4 4 2
    4 7 2
    样例输出
    12
    评测用例规模与约定
      对于 30% 的评测用例,1 <= n <= 10;
      对于 60% 的评测用例,1 <= n <= 20;
      对于所有评测用例,1 <= n <= 30,0 <= x, y <= 1000,1 <= r <= 1000。

    import java.util.Scanner;
    
    public class _010 {
        public static boolean[][] bool = new boolean[30][30];
        static boolean[] vis = new boolean[30];
        public static int[] x = new int[30];
        public static int[] y = new int[30];
        public static int[] r = new int[30];
        public static int n = 0, max = -1;
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            n = sc.nextInt();
            for (int i = 1; i <= n; i++) {
                x[i] = sc.nextInt();
                y[i] = sc.nextInt();
                r[i] = sc.nextInt();
            }
            for (int i = 1; i <= n; i++) {
                for (int j = i + 1; j <= n; j++) {
                    boolean bo = ((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]) > (r[i] + r[j])
                            * (r[i] + r[j]));
                    bool[i][j] = bo;
                    bool[j][i] = bo;
                }
            }
            sc.close();
            dfs(1);
            System.out.println(max);
        }
    
        public static void dfs(int step) {
            if (step > n) {
                int sum = 0;
                for (int i = 1; i <= n; i++) {
                    if (vis[i]) {
                        sum += (r[i] * r[i]);
                    }
                }
                max = Math.max(sum, max);
    
                return;
            }
    
            vis[step] = false;
            dfs(step + 1);
            for (int i = 1; i < step; i++) {
                if (vis[i] && !bool[i][step]) {
                    return;
                }
    
            }
            vis[step] = true;
            dfs(step + 1);
        }
    }
    
  • 相关阅读:
    mysql数据向Redis快速导入
    jquery.cookie.js使用
    怎么才能在职场中如鱼得水(转)
    内部类(编程思想)
    main方法原来只要放在public static类中就能跑,涨知识了
    匿名内部类--工厂
    Java通过继承外部类来建立该外部类的protected内部类的实例(转)
    监听器的使用例子 ServletContextListener
    Class.getResource()方法的使用
    maven打包资源文件(转)
  • 原文地址:https://www.cnblogs.com/qimuz/p/12727916.html
Copyright © 2020-2023  润新知