首页 > 技术文章 > 蓝桥杯2022年java试题基础练习

xingci 2022-03-01 12:58 原文

一:基础练习:

(本文只附代码,解析后续修改后添上)

  1.a+b问题:

    代码如下:

    

 1  1 import java.util.*;
 2  2 public class Main {
 3  3     public static void main(String args[]) {
 4  4     int a,b;
 5  5 
 6  6         Scanner input = new Scanner(System.in);
 7  7         a = input.nextInt();
 8  8         b = input.nextInt();
 9  9 
10 10         System.out.println(a+b);
11 11     }
12 12 }
View Code

 

 

  2.序列排序问题:

    代码如下:

    

 1  1 import java.util.Arrays;
 2  2 import java.util.Scanner;
 3  3 
 4  4 public class Main {
 5  5     public static void main(String[] args) {
 6  6         Scanner scanner = new Scanner(System.in);
 7  7         int n = scanner.nextInt();
 8  8         int[] arr = new int[n];
 9  9         //往数组添加元素,接收数据
10 10         for (int i = 0; i < n; i++) {
11 11             arr[i] = scanner.nextInt();
12 12         }
13 13 
14 14         //对数组排序
15 15         Arrays.sort(arr);
16 16 
17 17         //打印数组
18 18         for (int i = 0; i < n; i++) {
19 19             System.out.print(arr[i] + " ");
20 20         }
21 21     }
22 22 }
View Code

 

 

  3.十六进制转八进制:

    代码如下:

  1 import java.util.Scanner;
  2  public class Main {
  3         public static void main(String[] args) {
  4             Question1();
  5 
  6         }
  7         public static void Question1() {
  8             Scanner in = new Scanner(System.in);
  9             int n = Integer.parseInt(in.nextLine());
 10             int i, j;
 11             String[] sz = new String[n];
 12             //读入十六进制数
 13             for (i = 0; i < n; i++) {
 14                 sz[i] = in.next();
 15             }
 16             for(i = 0; i < sz.length; i++) {
 17                 String s = sz[i];
 18                 StringBuilder sb = new StringBuilder();
 19                 //将一位十六进制数转换为四位二进制数
 20                 for(j = 0; j < s.length(); j++) {
 21                     switch(s.charAt(j)) {
 22                         case '0':
 23                             sb.append("0000");
 24                             break;
 25                         case '1':
 26                             sb.append("0001");
 27                             break;
 28                         case '2':
 29                             sb.append("0010");
 30                             break;
 31                         case '3':
 32                             sb.append("0011");
 33                             break;
 34                         case '4':
 35                             sb.append("0100");
 36                             break;
 37                         case '5':
 38                             sb.append("0101");
 39                             break;
 40                         case '6':
 41                             sb.append("0110");
 42                             break;
 43                         case '7':
 44                             sb.append("0111");
 45                             break;
 46                         case '8':
 47                             sb.append("1000");
 48                             break;
 49                         case '9':
 50                             sb.append("1001");
 51                             break;
 52                         case 'A':
 53                             sb.append("1010");
 54                             break;
 55                         case 'B':
 56                             sb.append("1011");
 57                             break;
 58                         case 'C':
 59                             sb.append("1100");
 60                             break;
 61                         case 'D':
 62                             sb.append("1101");
 63                             break;
 64                         case 'E':
 65                             sb.append("1110");
 66                             break;
 67                         case 'F':
 68                             sb.append("1111");
 69                             break;
 70                     }
 71                 }
 72                 //再将二进制数转换成八进制数
 73                 transform(sb);
 74             }
 75 
 76         }
 77         public static void transform(StringBuilder sb) {
 78             int num = sb.length() % 3;
 79             //判断长度是否为3的倍数
 80             switch(num) {
 81                 case 0:
 82                     //若转换的八进制数中第一位为0则删去
 83                     if(sb.substring(0, 3).equals("000"))
 84                         sb.delete(0, 3);
 85                     break;
 86                 case 1:
 87                     if(sb.substring(0, 1).equals("0"))
 88                         sb.delete(0, 1);
 89                     else sb = sb.insert(0, "00");
 90                     break;
 91                 case 2:
 92                     if(sb.substring(0, 2).equals("00"))
 93                         sb.delete(0, 2);
 94                     else sb = sb.insert(0, "0");
 95                     break;
 96             }
 97             StringBuilder res = new StringBuilder();
 98             int len = sb.length();
 99             String[] new_s1 = new String[len/3];
100             //取三位转换成八进制数
101             for(int i = 0; i < len/3; i++) {
102                 int tmp = Integer.parseInt(sb.substring(i * 3, i * 3 + 3), 2);
103                 res.append(tmp);
104             }
105             System.out.println(res);
106         }
107     }
View Code

 

4.十六进制转十进制:

  代码如下:

    

1 import java.util.Scanner;    
2 public class Main {
3     public static void main(String[] args) {
4         Scanner scanner = new Scanner(System.in);
5         String string = scanner.nextLine();
6         System.out.print(Long.parseLong(string, 16));
7     }        
8 }
View Code

 

 5.十进制转十六进制:

  代码如下:

    

 1 import java.util.Scanner;
 2 public class Main {
 3         public static void main(String[] args) {
 4             Scanner input = new Scanner(System.in);
 5             one(input.nextInt());
 6 
 7         }
 8 
 9         public static void one(int a){
10             int b;
11             if(a<=15) {
12                 tohax(a);
13 //            System.out.print(a);
14 
15             }
16             else{
17                 b=a%16;
18                 one(a>>4);
19                 tohax(b);
20 //            System.out.print(b);
21             }
22         }
23         public static void tohax(int c){
24             switch (c){
25                 default:
26                     System.out.print(c);
27                     break;
28 
29                 case 10:
30                     System.out.print("A");
31                     break;
32                 case 11:
33                     System.out.print("B");
34                     break;
35                 case 12:
36                     System.out.print("C");
37                     break;
38                 case 13:
39                     System.out.print("D");
40                     break;
41                 case 14:
42                     System.out.print("E");
43                     break;
44                 case 15:
45                     System.out.print("F");
46                     break;
47 
48             }
49         }
50     }
View Code

 

 6.特殊的回文数:

  代码如下:

    

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4         final static byte one = 1;//常量1.
 5         final static byte two = 2;//常量2.
 6         final static byte ten = 10;//常量10;
 7 
 8         //输入:正整数n。
 9 
10 
11     //输出:y行,每行为一个回文数。
12         /*
13         * 格式:回文数每个数的和都为n
14         *       从左读和从右读是一样的,所以是关于y轴对称。
15         *       数据大小:10001-999999。n的大小为2-54.
16         *       5位的是2-45,6位的是2-54.
17         * 要求:10进制,五位到六位的所有正整数。
18         *       从小到大输出结果。
19         * */
20 
21     //程序如下:
22         //1.输入正整数n。
23         //2.判断是否是偶数,不是,则说明一定是5位。
24         //3.判断是否小于45,不是,则说明一定是6位。
25         //4.求5位。输出结果
26         //5.   求6位。输出结果
27     public static void main(String[] args) {
28 
29             Scanner input = new Scanner(System.in);
30             byte in = input.nextByte(); //获取到输入到2-54的一个正整数。
31 
32             if (in % two != 0) {
33                     askfive(in);//不是偶数,就只求5位
34             } else if (in > 45) {
35                     asksix(in);//大于45,就只求6位。
36             } else {//都不是,就要求5位和6位。
37                     askfive(in);
38                     asksix(in);
39             }
40     }
41 
42         public static void askfive(byte in) {
43                 //求5位数。
44                 //先确定第一位最小值存不存在。
45                 for (int i = one; i <ten ; i++) {//第一位
46                         for (int j = 0; j <ten ; j++) {//第二位
47                                 final int i0 = in - two * i - two * j;
48                                 if (i0 < ten&&i0>=0) {//求第一位等于第五位,第二位等于第四位,第三位是否满足小于10的要求的数存在。
49                                         System.out.println(i+""+j+""+i0+""+j+""+i);
50 
51                                 }
52                         }
53                 }
54         }
55 
56         public static void asksix(byte in) {
57                 //求6位数。
58                 //先确定第一位最小值存不存在。
59                 for (int i = one; i <ten ; i++) {//第一位数
60                         for (int j = 0; j <ten ; j++) {//第二位数
61                                final int i1 = (in - two * i - two * j) / two;
62                                 if (i1 < ten&&i1>=0) {//第三位数成立
63                                         System.out.println(i+""+j+""+ i1 +""+ i1 +""+j+""+i);
64                                 }
65 
66                         }
67 
68                 }
69         }
70 
71 }
View Code

 

 7.回文数:

  代码如下:

    

 1 public class Main {
 2 
 3     /*
 4     * 输入:无
 5     * 输出:回文数
 6     *   格式要求:长度是四位的十进制数。关于y轴对此,第一位等于第四位,第二位等于第三位。
 7     *              范围是1001-9999.
 8     *   要求:从小到大。
 9     * */
10 
11 
12     //编程思路:
13     //1.从第一位为1,第二位为0,开始循环。
14     //2、输出所有这样的数。
15 
16 
17     public static void main(String[] args) {
18         for (int i = 1; i <10 ; i++) {//第一位
19             for (int j = 0; j < 10; j++) {//第二位
20                 System.out.println(i+""+j+""+j+""+i);
21             }
22         }
23     }
24 }
View Code

 

 8.特殊的数字:

  代码如下:

    

 1 public class Main {
 2     final static byte ten = 10;//常量10;
 3     final static byte three = 3;//常量3;
 4 
 5 
 6     /*
 7     * 输入:无
 8     * */
 9 
10     /*
11     * 输出:n行,三位的十进制
12     * 格式要求:从小到大。
13     * */
14 
15 
16     //程序思路:
17         //1、范围是从100-999.而根据立方根来推断,如果从立方根下手,最小要从105(1+125>100)开始循环,最大到962(8+216+729<999)
18     // 2.对三个数循环,求和,判断是否等于自己的10进制。
19     // 3.输出所有相等的数。
20 
21     public static void main(String[] args) {
22         for (int i = 105; i <963 ; i++) {
23             int a = i % ten;//个位。
24             int b = (i / ten)%ten;//十位位。
25             int c = i/100 ;//百位。
26             if (i == (Math.pow(a, three) + Math.pow(b, three) + Math.pow(c, three))) {
27                 System.out.println(i);
28             }
29 
30 
31                 }
32 
33             }
34 
35         }
View Code

 9.杨辉三角:

  代码如下:

  

 1 import java.math.BigInteger;
 2 import java.util.Objects;
 3 import java.util.Scanner;
 4 
 5 public class Main {
 6 
 7 
 8     /*
 9     * 输入:整数n
10     * 格式要求:n的范围是1-34.
11     * */
12 
13     /*
14     * 输出:n行,每一行是杨辉三角的数。
15     * 格式要求,每一行的每个数要按顺序输出,并且要使用一个空格分隔。
16     * */
17 
18 
19     //程序思路:
20         //1、输入一个byte大小的数,n
21         //2、根据Cn,循环和递归的方式来求每一行每一个数
22 
23 
24     public static void main(String[] args) {
25 
26         Scanner input = new Scanner(System.in);
27         byte n = input.nextByte();//获取整形n。
28 
29         askYh(n);
30 
31     }
32     public static void askYh(byte n) {//求杨辉的某行。
33         int b = n-1;//C的下方。
34         if (b == 0) {//说明是第一行
35             System.out.println("1");
36         }
37         for (int i = 0; i < n; i++) {//n行。
38             for (int j = 0; j <=i; j++) {//对C的上方从0到i循环,注意不能大于i
39                 BigInteger out = askJc(i, j) .divide(askJc02(BigInteger.valueOf(i) ,BigInteger.valueOf(j))) ;//实际就是n!/(k!*(n-k)!
40                 if (i == j)//二项式最后一位数
41                     System.out.print(out);
42                 else
43                 System.out.print(out + " ");//二项式中间的数。
44             }
45             System.out.println();//换行。
46         }
47     }
48 
49     public static BigInteger askJc(int i,int j) {//求b!/i!
50         //先将int,转换为Biginteger类型。
51         BigInteger up = BigInteger.valueOf(j);//上方。
52         BigInteger down = BigInteger.valueOf(i);//下方。
53         
54         //递归调用
55         if (down .equals(up .add(BigInteger.valueOf(1)))  ) {
56             return down;
57         }
58         if (down .equals(up) ) {//当c的上方和下方相同的时候,返回1.
59             return new BigInteger("1");
60         }
61         return down.multiply( askJc(down.intValue()-1,up.intValue()));
62     }
63 
64 
65     public static BigInteger askJc02(BigInteger i, BigInteger j) {//求(i-j)!
66         BigInteger one = BigInteger.valueOf(1);
67         if ((Objects.equals(i, j.add(one)))||(Objects.equals(i, j))) { //当i-j = 1 或者i=j的时候。
68             return BigInteger.valueOf(1);
69 
70     }
71     return (i.subtract(j)) .multiply( askJc02(i.subtract(one) , j)  ) ;
72 }
73     }
View Code

 

10.查找整数:

  代码如下:

  

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     /*
 6     * 输入:三行
 7     * 第一行,整数n,表示数组个数
 8     * 第二行,非负整数数组,大小为0-10000.short类型
 9     * 第三行,整数a,为查找的整数。
10     * */
11 
12     /*
13     * 输出:整数c,表示a在数组当中第一次出现的位置
14     * 格式要求:c从1开始编号,取值为-1:表示无。1-n;
15     * */
16 
17     //程序思路:
18         //1.输入n,创建数组。
19         //2.初始化数组。
20         //3.输入整数a,查找a。算法:依次遍历。
21         //4.返回数组下标+1;
22 
23 
24     public static void main(String[] args){
25         //1.输入n,创建数组。
26         Scanner input = new Scanner(System.in);
27         int n = input.nextInt();//长度n
28         short[] arrys = new short[n];//数组arrys。
29 
30 
31         //2.初始化数组。
32         for (int i = 0; i < n; i++) {
33             arrys[i] = input.nextShort();
34 
35             //测试点:测试数组arrys的初始化情况。
36 //            System.out.print("测试点一:"+"arrys["+i+"]:"+arrys[i]+" ");
37         }
38 
39         //3.输入整数a。
40         short a = input.nextShort();//查到的对象a。
41         int c = -1;//返回下标的对象,默认初始化为-1.
42 
43         //4.查找a,返回下标。
44         for (int i = 0; i < n; i++) {
45             if(arrys[i] == a)//如果数存在。就要跳出并终止循环。
46             {
47                 c = i+1;//说明a存在。
48 
49                 //测试点:测试数组查找的情况。
50 //                System.out.println("测试点二:当前a值为:"+a+"当前数组内容为:"+arrys[i]+"当前下标为:"+i);
51                 break;
52             }
53         }
54 
55         //5.输出下标:
56         System.out.println(c);
57     }
58 }
View Code

11.数列特征:

  代码如下:

   

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     /*
 6     * 输出:两行。
 7     *       第一行,整数n,数组的长度。范围:1--10000 short类型。
 8     *       第二行,n个数,数组的各个值,范围:-10000--10000 short类型。
 9     * */
10 
11     /*
12     * 输出:三行。
13     *       第一行,整数,表示数组的最大值。-10000--10000 short类型
14     *       第二行,整数,数组最小值。-10000--10000 short类型
15     *       第三行,整数,数组的和。范围:-1亿--1亿。int类型。
16     * */
17 
18     //程序思路:
19         //1.输入数组长度n,初始化数组。
20         //2.求数组的最大值并打印输出。
21         //3.求数组的最小值并打印输出。
22         //4.求数组的总和并打印输出。
23 
24     public static void main(String[] args) {
25 
26         //1.输入数组长度n,初始化数组。并求和。
27         Scanner input = new Scanner(System.in);
28         short n = input.nextShort(); //长度n。
29         short[] arrys = new short[n];//数组arrys。
30         int sum = 0; //数组的和。
31         int min = 0;//数组最小值。
32         int max = 0;//数组最大值。
33 
34         for (int i = 0; i < n; i++) {//数组初始化。
35             arrys[i] =  input.nextShort();
36 //            //测试点一:
37 //            System.out.print(arrys[i]+" ");
38 
39             sum = sum + arrys[i];//求和。
40             if (i==0)//初始化
41             min = max = arrys[i];//初始化。
42             if (i>0){//比较大小。
43                 if (arrys[i]>max) {//如果下一项大于前一项。
44                     //测试点二:
45 //                    System.out.println("测试点二,检查max指针跳转情况:");
46 //                    System.out.println("arrys:"+arrys[i]+" max:"+max);
47                     max = arrys[i];//max指针指向下一项。
48                 }else if(arrys[i]<min) {
49                     //测试点三:
50 //                    System.out.println("测试点三,检查min指针跳转情况:");
51 //                    System.out.println("arrys:"+arrys[i]+" min:"+min);
52                     min = arrys[i];//否则,min指针则指向下一项。
53                 }
54             }
55         }
56 
57         System.out.println(max);
58         System.out.println(min);
59         System.out.println(sum);
60 
61     }
62 }
View Code

12.字母图形:

  代码如下:

  

 1 import java.util.Scanner;
 2 public class Main {
 3 
 4     /*
 5     * 输入:一行整数n,整数m。
 6     * 格式要求:n(1,m),m(1到26)
 7     * */
 8 
 9     /*
10     * 输出:n行,每行是m个单词,并且有一定规律。
11     * */
12 
13     //程序思路:
14         //1.一维数组,存储26个字母,排序按下标.
15         //2.输入整数n,m.
16         //3.输出n行,m列的元素。
17             //输出n行,每行首元素为当前行数的下标字母,将该元素的前面所有元素输出完毕,再按序输出元素。
18             //每个元素个数为m。
19 
20 
21     public static void main(String[] args){
22         //1.一维数组,存储26个字母,排序按下标.
23         char[] arrys = new  char[26];//字符数组arrys
24         for (int i = 0; i <26 ; i++) {
25             arrys[i] = (char)(i+65);
26 //            System.out.print(arrys[i]+" ");//测试点一:测试字符数组的初始话情况。
27         }
28 
29         //2.输入整数n,m
30         Scanner input = new Scanner(System.in);
31         int n = input.nextInt();//行数n
32         int m = input.nextInt();//列数m
33         int counter =0;//计数器。
34 
35         //3.打印字符串。
36         for (int i = 0; i <n ; i++) {//行数n
37             counter = i;//计数器
38 
39             for (int j = 0; j <m ; j++) {//列数m
40                 //第一行:
41                 if (i==0){//如果是从头开始
42                 System.out.print(arrys[j]);
43 
44                 //第n行:
45                 }else if (counter!=0){
46                     System.out.print(arrys[counter]);
47                     counter--;//自减。
48 
49                     //第n行,第n列。
50                 }else
51                     System.out.print(arrys[j-i]);//正常输出。
52             }
53             System.out.println();//换行。
54         }
55         }
56 
57     }
View Code

 

 13.01字串:

   代码如下:

  

 1 import java.text.DecimalFormat;
 2 
 3 public class Main {
 4 
 5 
 6     /*
 7     * 输入:无
 8     * */
 9 
10 
11     /*
12      * 输出:32行,5位01字符串。
13      * 格式要求:从小到大,二进制。
14      * */
15 
16     //程序思路:
17         //1.创建byte数组,初始化0-31.
18         //2.遍历数组,并转换成二进制输出。
19 
20     public static void main(String[] args){
21         //1.创建byte数组,初始化0-31.
22         byte[] arrys = new byte[32];//数组arrys。
23         for (byte i = 0; i < 32; i++) {
24             arrys[i] = i;//数组初始化。
25 //            System.out.print(arrys[i]);//测试一:测试数组初始化情况。
26         }
27         for (int i = 0; i < 32; i++) {
28         String out = Integer.toBinaryString(arrys[i]);//整形转换成二进制字符串
29             DecimalFormat ft = new DecimalFormat("00000");//格式化工具类。
30             Integer setout = Integer.valueOf(out);
31 //            System.out.println(setout);
32             System.out.println(ft.format(setout) );
33         }
34     }
35 }
View Code

14.闰年判断:

  代码如下:

  

 1 import java.util.Scanner;
 2 public class Main {
 3 
 4     /*
 5     * 输入:一行,一个整数y,表示年份
 6     * 格式要求:大小范围:1990-2050.short类型。
 7     * */
 8 
 9     /*
10     * 输出:一行,是闰年就yes,不是就no。
11     * */
12 
13     //程序思路:
14         //1.要比较圈圈,很明显是4包括的更大,然后能400 和 不能除100是互斥的
15         //2.输出一个整形。
16         //3.能否被4整除,不能,则明显不是
17             //不能被100整除是闰年
18             //能被400整除是瑞年。
19 
20     public static void main(String[] args){
21         Scanner input = new Scanner(System.in);
22         short year = input.nextShort();
23 
24         if (year % 4 == 0) {
25             //能被4整除,不能被100整除。
26             if (year%100!=0) {
27                 System.out.println("yes");
28                 return;
29             }
30 
31             //能被4整除,能被400整除。
32             if (year%400==0){
33                 System.out.println("yes");
34                 return;
35             }
36             System.out.println("no");
37 
38         }else System.out.println("no");
39     }
40 }
View Code

15.Fibonacci数列

  代码如下:

  

 1 import java.util.Scanner;
 2 public class Main {
 3     public static void main(String[] args) {
 4         int[] a = new int[10000001];
 5         a[1] = 1;
 6         a[2] = 1;
 7         int n = new Scanner(System.in).nextInt();
 8         for (int i=3; i<=n; i++){
 9             a[i] = (a[i-1]+a[i-2])%10007;
10         }
11         System.out.println(a[n]);
12     }
13 }
View Code

16.园的面积:

  代码如下:

  

 1 import java.math.BigDecimal;
 2 import java.math.RoundingMode;
 3 import java.util.Scanner;
 4 
 5 
 6 public class Main {
 7 
 8     /*
 9     * 输入:整数r,表示园的半径。
10     * 格式要求:r的大小(1--1w)  int类型
11     * */
12 
13     /*
14     * 输出:一行,实数s,表示园的面积。
15     * 格式要求:四舍五入,保留小数点7位。 float 类型。
16     * */
17 
18     //程序思路:
19         //1.输入园的半径r
20         //2.定义常量pi = atan(1.0)*4.
21         //3.求园的面积,对小数点后面第八位进行四舍五入。
22             //小于5,则第七位不变,输出小数点后7位。
23             //大于等于5,等第七位+1,本质应该是+0.0000001,输出小数点后7位的浮点数。
24         //.输出园的面积s。
25 
26     final static double PI =3.14159265358979323;//pi
27 
28     public static  void main(String[] args) {
29         //1.半径
30         Scanner input = new Scanner(System.in);
31 
32 //        while (true) {
33             int r = input.nextInt();
34 
35             //2.常量pi,变量面积s。
36             double s = PI * Math.pow(r, 2);
37 //            System.out.println(s);
38 
39             //3.四舍五入。
40             BigDecimal a = new BigDecimal(PI * Math.pow(r, 2));
41 
42             double sets = a.setScale(7, RoundingMode.HALF_UP).doubleValue();
43 
44 //            System.out.println(sets);
45             System.out.println(a.setScale(7, RoundingMode.HALF_UP));
46         }
47     }
View Code

17.序列求和:

   代码如下:

  

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     /*
 5     * 输入:一行,整数n
 6     * 格式要求:取值范围(1--10亿) int 类型。
 7     * */
 8 
 9     /*
10     * 输出:一行,整数sum,表示递增序列的和
11     * 格式要求:取值预计在百亿级别,long类型。
12     * */
13 
14 //    程序思路:
15 //        1.定义常量d,首相a1=1,总和sum。
16 //        2.输入序列长度n
17 //          3.根据公式,求序列的和。
18 
19     public static void main(String[] args){
20         //1.序列n
21         Scanner input = new Scanner(System.in);
22         int n = input.nextInt();
23 
24         //2.常量d,a1;
25         int d =1;
26         int a1=1;
27         long sum;
28 
29         //3.求和。
30         sum = n*a1 + (long) d *n*(n-1)/2;
31         System.out.println(sum);
32 
33     }
34 }
View Code

 

 

 

  //未完,待更。。。

 //也欢迎各位提出宝贵意见,有则改之无则加勉。

推荐阅读