zoukankan      html  css  js  c++  java
  • 算法笔记_123:蓝桥杯第七届省赛(Java语言B组部分习题)试题解答

     目录

    1 凑算式

    2 方格填数

    3 四平方和

     


    1 凑算式

    凑算式
    
         B      DEF
    A + --- + ------- = 10
         C      GHI
         
    (如果显示有问题,可以参见【图1.jpg】)
         
         
    这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
    
    比如:
    6+8/3+952/714 就是一种解法,
    5+3/1+972/486 是另一种解法。
    
    这个算式一共有多少种解法?
    
    注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
    
    (碰到除法问题,要特别注意,如题目未事先声明进行整除,均首先消除分母,进行乘法运算,这样可以消除浮点数误差)
    29
    public class Main {
        public static int count = 0;
        
        public void swap(int[] A, int a, int b) {
            int temp = A[a];
            A[a] = A[b];
            A[b] = temp;
        }
        
        public void dfs(int[] A, int step) {
            if(step == A.length) {
                if(check(A))
                    count++;
                return;
            } else {
                for(int i = step;i < A.length;i++) {
                    swap(A, i, step);
                    dfs(A, step + 1);
                    swap(A, i, step);
                }
            }
            return;
        }
        
        public boolean check(int[] A) {
            int a1 = A[0] * A[2] * (A[6]*100 + A[7]*10 + A[8]);
            int a2 = A[1] * (A[6]*100 + A[7]*10 + A[8]);
            int a3 = (A[3]*100 + A[4]*10 + A[5]) * A[2];
            if(a1 + a2 + a3 == 10 * A[2] * (A[6]*100 + A[7]*10 + A[8]))
                return true;
            return false;
        }
        
        public static void main(String[] args) {
            Main test = new Main();
            int[] A = {1,2,3,4,5,6,7,8,9};
            test.dfs(A, 0);
            System.out.println(count);
        }
    }

    2 方格填数

    方格填数
    
    如下的10个格子
       +--+--+--+
       |  |  |  |
    +--+--+--+--+
    |  |  |  |  |
    +--+--+--+--+
    |  |  |  |
    +--+--+--+
    
    (如果显示有问题,也可以参看【图1.jpg】)
    
    填入0~9的数字。要求:连续的两个数字不能相邻。
    (左右、上下、对角都算相邻)
    
    一共有多少种可能的填数方案?
    
    请填写表示方案数目的整数。
    注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
    
    1580
    public class Main {
        public static int count = 0;
        
        public void swap(int[] A, int a, int b) {
            int temp = A[a];
            A[a] = A[b];
            A[b] = temp;
        }
        
        public void dfs(int[] A, int step) {
            if(step == A.length) {
                if(check(A))
                    count++;
                return;
            } else {
                for(int i = step;i < A.length;i++) {
                    swap(A, i, step);
                    dfs(A, step + 1);
                    swap(A, i, step);
                }
            }
            return;
        }
        
        public boolean check(int[] A) {
            if(Math.abs(A[0]-A[3]) != 1 && Math.abs(A[0]-A[1]) != 1 && Math.abs(A[0]-A[4]) != 1 && Math.abs(A[0]-A[5]) != 1) {
                if(Math.abs(A[1]-A[4]) != 1 && Math.abs(A[1]-A[5]) != 1 && Math.abs(A[1]-A[2]) != 1 && Math.abs(A[1]-A[6]) != 1) {
                    if(Math.abs(A[2]-A[5]) != 1 && Math.abs(A[2]-A[6]) != 1) {
                        if(Math.abs(A[3]-A[4]) != 1 && Math.abs(A[3]-A[7]) != 1 && Math.abs(A[3]-A[8]) != 1) {
                            if(Math.abs(A[4]-A[5]) != 1 && Math.abs(A[4]-A[7]) != 1 && Math.abs(A[4]-A[8]) != 1 && Math.abs(A[4]-A[9]) != 1) {
                                if(Math.abs(A[5]-A[8]) != 1 && Math.abs(A[5]-A[9]) != 1 && Math.abs(A[5]-A[6]) != 1) {
                                    if(Math.abs(A[6]-A[9]) != 1 && Math.abs(A[7]-A[8]) != 1) {
                                        if(Math.abs(A[8]-A[9]) != 1)
                                            return true;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return false;
        }
        
        public static void main(String[] args) {
            Main test = new Main();
            int[] A = {0,1,2,3,4,5,6,7,8,9};
            test.dfs(A, 0);
            System.out.println(count);
        }
    }

    3 四平方和

    四平方和
    
    四平方和定理,又称为拉格朗日定理:
    每个正整数都可以表示为至多4个正整数的平方和。
    如果把0包括进去,就正好可以表示为4个数的平方和。
    
    比如:
    5 = 0^2 + 0^2 + 1^2 + 2^2
    7 = 1^2 + 1^2 + 1^2 + 2^2^符号表示乘方的意思)
    
    对于一个给定的正整数,可能存在多种平方和的表示法。
    要求你对4个数排序:
    0 <= a <= b <= c <= d
    并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法
    
    
    程序输入为一个正整数N (N<5000000)
    要求输出4个非负整数,按从小到大排序,中间用空格分开
    
    例如,输入:
    5
    则程序应该输出:
    0 0 1 2
    
    再例如,输入:
    12
    则程序应该输出:
    0 2 2 2
    
    再例如,输入:
    773535
    则程序应该输出:
    1 1 267 838
    
    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗  < 3000ms
    
    
    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
    
    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
    注意:主类的名字必须是:Main,否则按无效代码处理。
    import java.util.Scanner;
    
    public class Main {
        
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int N = in.nextInt();
            int len = (int) Math.sqrt(N);
            for(int a = 0;a <= len;a++) {
                for(int b = a;b <= len;b++) {
                    for(int c = b;c <= len;c++) {
                        for(int d = c;d <= len;d++) {
                            int temp = a*a + b*b + c*c + d*d;
                            if(temp == N) {
                                System.out.println(a+" "+b+" "+c+" "+d);
                                return;
                            }
                        }
                    }
                }
            }
        }
    
    }
  • 相关阅读:
    kubernetes之常见故障排除(一)
    kubernetes集群管理命令(三)
    kubernetes集群管理命令(二)
    kubernetes集群管理常用命令一
    kubernetes集群管理之通过jq来截取属性
    kubernetes管理之使用yq工具截取属性
    kubectl技巧之通过jsonpath截取属性
    kubectl技巧之通过go-template截取属性
    kubernetes容器编排之定义环境变量以及通过downwardapi把pod信息作为环境变量传入容器内
    kubectl技巧之查看资源列表,资源版本和资源schema配置
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/6656574.html
Copyright © 2011-2022 走看看