• [蓝桥杯] 官方练习题 (入门+基础 )


    蓝桥杯 官方练习题 (入门+基础 )

    练习 Day1

    试题 入门训练 Fibonacci数列 BEGIN-4

    问题描述

    Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

    当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

    输入格式

    输入包含一个整数n。

    输出格式

    输出一行,包含一个整数,表示Fn除以10007的余数。

    样例输入

    10

    样例输出

    55

    思路

    因为%操作满足分配律,所以只需保存每次加和后 %10007 的值即可。

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int in = scanner.nextInt();
            int f1 = 1, f2 = 1, f3 = 1;
            for (int i = 3; i <= in; i++) {
                f3 = (f1 + f2) % 10007;
                f1 = f2;
                f2 = f3;
            }
            System.out.println(f3);
    }
    

    试题 入门训练 圆的面积 BEGIN-3

    问题描述

    给定圆的半径r,求圆的面积。

    输入格式

    输入包含一个整数r,表示圆的半径。

    输出格式

    输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。

    说明:在本题中,输入是一个整数,但是输出是一个实数。

    对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被认为错误。

    实数输出的问题如果没有特别说明,舍入都是按四舍五入进行。

    样例输入

    4

    样例输出

    50.2654825

    思路

    直接算。

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int r = scanner.nextInt();
            double out = Math.PI * r * r;
            System.out.println(String.format("%.7f", out));
    }
    

    试题 入门训练 序列求和 BEGIN-2

    问题描述

    求1+2+3+...+n的值。

    输入格式

    输入包括一个整数n。

    输出格式

    输出一行,包括一个整数,表示1+2+3+...+n的值。

    样例输入

    4

    样例输出

    10

    思路

    等差数列求和公式

    [S_n=frac{n(a_1+a_n)}{2} ]

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            long n = scanner.nextLong();
            long sum = n * (1 + n) / 2;
            System.out.println(sum);
    }
    

    试题 基础练习 十六进制转八进制 BASIC-12

    问题描述

    给定n个十六进制正整数,输出它们对应的八进制数。

    输入格式

    输入的第一行为一个正整数n (1<=n<=10)。
    接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

    输出格式

    输出n行,每行为输入对应的八进制正整数。

    【注意】
    输入的十六进制数不会有前导0,比如012A。
    输出的八进制数也不能有前导0。。

    样例输入

    2
    39
    123ABC

    样例输出

    71
    4435274

    思路

    BigInterger 构造函数直接转。

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            String[] inputs = new String[n + 1];
            for (int i = 0; i < n; i++) {
                inputs[i] = scanner.next();
            }
    
            for (int i = 0; i < n; i++) {
                String str = new BigInteger(inputs[i], 16).toString(8);
                System.out.println(str);
            }
    }
    

    试题 基础练习 十六进制转十进制 BASIC-11

    问题描述

    从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
    注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

    样例输入

    FFFF

    样例输出

    65535

    思路

    根据各位的权重计算后加和

    eg: FE[16] = E(14)* 16^0 + F(15)* 16^1 = 254[10]

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            String h = scanner.next();
            long number = 0;
            for (int i = 0; i < h.length(); i++) {
                int value = 0;
                char thisChar = h.charAt(h.length() - 1 - i);
                switch (thisChar) {
                    case 'A':value = 10;break;
                    case 'B':value = 11;break;
                    case 'C':value = 12;break;
                    case 'D':value = 13;break;
                    case 'E':value = 14;break;
                    case 'F':value = 15;break;
                    default:
                        value = thisChar - '0';
                }
                number += value * Math.pow(16, i);
            }
            System.out.println(number);
    }
    

    试题 入门训练 十进制转十六进制 BASIC-10

    问题描述

    十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。

    十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。

    给出一个非负整数,将它表示成十六进制的形式。

    输入格式

    输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647

    输出格式

    输出这个整数的16进制表示

    样例输入

    30

    样例输出

    1E

    思路

    从最低位开始 除16 余数转换成十六进制形式,商作为下一次计算的被除数,直到商为零为止,倒序合成成完整十六进制数。

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int d = scanner.nextInt();
            StringBuilder stringBuilder = new StringBuilder();
    
            if (d == 0) {
                stringBuilder.append(0);
            }
            while (d != 0) {
                int value = d % 16;
                switch (value) {
                    case 10:stringBuilder.append('A');break;
                    case 11:stringBuilder.append('B');break;
                    case 12:stringBuilder.append('C');break;
                    case 13:stringBuilder.append('D');break;
                    case 14:stringBuilder.append('E');break;
                    case 15:stringBuilder.append('F');break;
                    default:
                        stringBuilder.append(value);
                }
                d /= 16;
            }
            for (int i = stringBuilder.length() - 1; i >= 0; i--) {
                System.out.print(stringBuilder.charAt(i));
            }
    }
    

    试题 入门训练 特殊回文数 BASIC-9

    问题描述

    123321是一个非常特殊的数,它从左边读和从右边读是一样的。
    输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

    输入格式

    输入一行,包含一个正整数n

    输出格式

    按从小到大的顺序输出满足条件的整数,每个整数占一行。

    样例输入

    52

    样例输出

    899998
    989989
    998899

    思路

    折叠

    先从原数字(左)上每次取一位,取三次(因为只需要5或6位的数字)

    左侧每次取掉数字后 /10

    去掉的数字*2 并加到sum中

    右侧每次获得新数字,源右侧数字 *10 + 新数字

    当 左侧<100 时,一定是五位数字,此时从sum中减去最后取的那个数字(五位数字最中间的数字只计算一次)

    最后比较sum和n的值,及左右数字的值是否相等即可。

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            int number = 10000;
            while (number < 1000000) {
                int left = number;
                int right = 0;
                int sum = 0;
                for (int j = 0; j < 3; j++) {
                    int value = left % 10;
                    right = right * 10 + value;
                    left /= 10;
                    sum += value * 2;
                    if (left < 100) {
                        sum -= value;
                        right /= 10;
                    }
                }
                if (sum == n && left == right) {
                    System.out.println(number);
                }
                number++;
            }
    }
    

    试题 入门训练 回文数 BASIC-8

    问题描述

    1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。

    输出格式

     按从小到大的顺序输出满足条件的四位十进制数。

    思路

    上一题的简化,去除了数字和的限制。

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            int number = 1000;
            while (number < 10000) {
                int left = number;
                int right = 0;
                for (int j = 0; j < 2; j++) {
                    int value = left % 10;
                    right = right * 10 + value;
                    left /= 10;
                }
                if (left == right) {
                    System.out.println(number);
                }
                number++;
            }
    }
    

    试题 入门训练 特殊的数字 BASIC-7

    问题描述

    153是一个非常特殊的数,它等于它的每位数字的立方和,即153=111+555+333。编程求所有满足这种条件的三位十进制数。

    输出格式

    按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。

    思路

    水仙花数。

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            int number = 100;
            while (number < 1000) {
                int sum = 0;
                int value = number;
                for (int i = 0; i < 3; i++) {
                    sum += Math.pow(value % 10, 3);
                    value /= 10;
                }
                if (number == sum) {
                    System.out.println(number);
                }
                number++;
            }
    }
    

    试题 入门训练 杨辉三角形 BASIC-6

    问题描述

    杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。

    它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。

    下面给出了杨辉三角形的前4行:

    1

    1 1 

    1 2 1

    1 3 3 1

    给出n,输出它的前n行。

    输入格式

    输入包括一个整数n。

    输出格式

    输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。

    样例输入

    4

    样例输出

    1
    1 1
    1 2 1
    1 3 3 1

    思路

    二维数组按规定取值即可。

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            List<List<Integer>> list = new ArrayList<>();
            for (int i = 0; i < n; i++) {
                List<Integer> row = new ArrayList<>();
                for (int j = 0; j <= i; j++) {
                    if (j == 0 || j == i) {
                        row.add(1);
                    } else {
                        row.add(list.get(i - 1).get(j - 1) + list.get(i - 1).get(j));
                    }
                }
                list.add(row);
            }
            for (List<Integer> integers : list) {
                for (Integer integer : integers) {
                    System.out.print(integer + " ");
                }
                System.out.println();
            }
    }
    

    试题 入门训练 查找整数 BASIC-5

    问题描述

    给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

    输入格式

    第一行包含一个整数n。

    第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。

    第三行包含一个整数a,为待查找的数。

    输出格式

    如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。

    样例输入

    6
    1 9 4 8 3 9
    9

    样例输出

    2

    思路

    直接找

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            List<Integer> list = new LinkedList<>();
            int n = scanner.nextInt();
            for (int i = 0; i < n; i++) {
                list.add(scanner.nextInt());
            }
            int mezasu = scanner.nextInt();
            for (int i = 0; i < n; i++) {
                if (list.get(i) == mezasu) {
                    System.out.print(i + 1);
                    mezasu = -1;
                    break;
                }
            }
            if (mezasu != -1) {
                System.out.print(-1);
            }
    }
    

    试题 入门训练 数列特征 BASIC-4

    问题描述

    给出n个数,找出这n个数的最大值,最小值,和。

    输入格式

    第一行为整数n,表示数的个数。

    第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。

    输出格式

    输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。

    样例输入

    5
    1 3 -2 4 5

    样例输出

    5
    -2
    11

    思路

    直接比

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE, sum = 0;
            for (int i = 0; i < n; i++) {
                int value = scanner.nextInt();
                if (value > max) {
                    max = value;
                }
                if (value < min) {
                    min = value;
                }
                sum += value;
            }
            System.out.print(max + " 
    " + min + " 
    " + sum + " 
    ");
    }
    

    试题 入门训练 字母图形 BASIC-3

    问题描述

    利用字母可以组成一些美丽的图形,下面给出了一个例子:

    ABCDEFG

    BABCDEF

    CBABCDE

    DCBABCD

    EDCBABC

    这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

    输入格式

    输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。

    输出格式

    输出n行,每个m个字符,为你的图形。

    样例输入

    5 7

    样例输出

    ABCDEFG
    BABCDEF
    CBABCDE
    DCBABCD
    EDCBABC

    思路

    看成ascii码来算。

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int h = scanner.nextInt();
            int w = scanner.nextInt();
            for (int i = 0; i < h; i++) {
                for (int j = 0; j < w; j++) {
                    if (j < i) {
                        System.out.print((char) (65 - j + i));
                    } else {
                        System.out.print((char) (65 + j - i));
                    }
                }
                System.out.println();
            }
    }
    

    试题 入门训练 01字串 BASIC-2

    问题描述

    对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:

    00000

    00001

    00010

    00011

    00100

    请按从小到大的顺序输出这32种01串。

    输入格式

    本试题没有输入。

    输出格式

    输出32行,按从小到大的顺序每行一个长度为5的01串。

    样例输出

    00000
    00001
    00010
    00011
    <以下部分省略>

    思路

    用BigInteger构造换进制,当成五位数二进制,最大31(十进制)。

    最后格式化补零即可。

    import java.math.*;
    import java.util.*;
    public static void Main(String[] args) {
            for (int i = 0; i < 32; i++) {
                String str = new BigInteger(String.valueOf(i), 10).toString(2);
                System.out.println(String.format("%05d", Integer.parseInt(str)));
            }
    }
    
  • 相关阅读:
    定时任务,执行时间动态配置方式
    MultipartFile+nio上传文件
    org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundaryRAYPKeHKTYSNdzc1;charset=UTF-8' not supported
    JDBC 连Sql Server 接数据库--The TCP/IP connection to the host localhost, port 1433 has failed
    swagger2常用注解说明
    java zxing实现二维码生成和解析zxing实现二维码生成和解析
    【springboot+easypoi】一行代码搞定excel导入导出
    linux中set、unset、export、env、declare,readonly的区别以及用法
    Spring---七大核心模块
    【Tomcat】Tomcat容器 web.xml详解
  • 原文地址:https://www.cnblogs.com/eisuto/p/14202880.html
Copyright © 2020-2023  润新知