1. 程式人生 > 其它 >藍橋杯2022年java試題

藍橋杯2022年java試題

一:基礎練習:

(本文只附程式碼,解析後續修改後添上)

  1.a+b問題:

    程式碼如下:

    

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

  2.序列排序問題:

    程式碼如下:

    

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

  3.十六進位制轉八進位制:

    程式碼如下:

      

import java.util.Scanner;
 public class Main {
        public static void main(String[] args) {
            Question1();

        }
        public static void Question1() {
            Scanner in = new Scanner(System.in);
            int n = Integer.parseInt(in.nextLine());
            int i, j;
            String[] sz = new String[n];
            //讀入十六進位制數
            for (i = 0; i < n; i++) {
                sz[i] = in.next();
            }
            for(i = 0; i < sz.length; i++) {
                String s = sz[i];
                StringBuilder sb = new StringBuilder();
                //將一位十六進位制數轉換為四位二進位制數
                for(j = 0; j < s.length(); j++) {
                    switch(s.charAt(j)) {
                        case '0':
                            sb.append("0000");
                            break;
                        case '1':
                            sb.append("0001");
                            break;
                        case '2':
                            sb.append("0010");
                            break;
                        case '3':
                            sb.append("0011");
                            break;
                        case '4':
                            sb.append("0100");
                            break;
                        case '5':
                            sb.append("0101");
                            break;
                        case '6':
                            sb.append("0110");
                            break;
                        case '7':
                            sb.append("0111");
                            break;
                        case '8':
                            sb.append("1000");
                            break;
                        case '9':
                            sb.append("1001");
                            break;
                        case 'A':
                            sb.append("1010");
                            break;
                        case 'B':
                            sb.append("1011");
                            break;
                        case 'C':
                            sb.append("1100");
                            break;
                        case 'D':
                            sb.append("1101");
                            break;
                        case 'E':
                            sb.append("1110");
                            break;
                        case 'F':
                            sb.append("1111");
                            break;
                    }
                }
                //再將二進位制數轉換成八進位制數
                transform(sb);
            }

        }
        public static void transform(StringBuilder sb) {
            int num = sb.length() % 3;
            //判斷長度是否為3的倍數
            switch(num) {
                case 0:
                    //若轉換的八進位制數中第一位為0則刪去
                    if(sb.substring(0, 3).equals("000"))
                        sb.delete(0, 3);
                    break;
                case 1:
                    if(sb.substring(0, 1).equals("0"))
                        sb.delete(0, 1);
                    else sb = sb.insert(0, "00");
                    break;
                case 2:
                    if(sb.substring(0, 2).equals("00"))
                        sb.delete(0, 2);
                    else sb = sb.insert(0, "0");
                    break;
            }
            StringBuilder res = new StringBuilder();
            int len = sb.length();
            String[] new_s1 = new String[len/3];
            //取三位轉換成八進位制數
            for(int i = 0; i < len/3; i++) {
                int tmp = Integer.parseInt(sb.substring(i * 3, i * 3 + 3), 2);
                res.append(tmp);
            }
            System.out.println(res);
        }
    }
View Code

4.十六進位制轉十進位制:

  程式碼如下:

    

import java.util.Scanner;    
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String string = scanner.nextLine();
		System.out.print(Long.parseLong(string, 16));
	}    	
}

5.十進位制轉十六進位制:

  程式碼如下:

    

import java.util.Scanner;
public class Main {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            one(input.nextInt());

        }

        public static void one(int a){
            int b;
            if(a<=15) {
                tohax(a);
//            System.out.print(a);

            }
            else{
                b=a%16;
                one(a>>4);
                tohax(b);
//            System.out.print(b);
            }
        }
        public static void tohax(int c){
            switch (c){
                default:
                    System.out.print(c);
                    break;

                case 10:
                    System.out.print("A");
                    break;
                case 11:
                    System.out.print("B");
                    break;
                case 12:
                    System.out.print("C");
                    break;
                case 13:
                    System.out.print("D");
                    break;
                case 14:
                    System.out.print("E");
                    break;
                case 15:
                    System.out.print("F");
                    break;

            }
        }
    }

6.特殊的迴文數:

  程式碼如下:

    

import java.util.Scanner;

public class Main {
        final static byte one = 1;//常量1.
        final static byte two = 2;//常量2.
        final static byte ten = 10;//常量10;

        //輸入:正整數n。


    //輸出:y行,每行為一個迴文數。
        /*
        * 格式:迴文數每個數的和都為n
        *       從左讀和從右讀是一樣的,所以是關於y軸對稱。
        *       資料大小:10001-999999。n的大小為2-54.
        *       5位的是2-45,6位的是2-54.
        * 要求:10進位制,五位到六位的所有正整數。
        *       從小到大輸出結果。
        * */

    //程式如下:
        //1.輸入正整數n。
        //2.判斷是否是偶數,不是,則說明一定是5位。
        //3.判斷是否小於45,不是,則說明一定是6位。
        //4.求5位。輸出結果
        //5.   求6位。輸出結果
    public static void main(String[] args) {

            Scanner input = new Scanner(System.in);
            byte in = input.nextByte(); //獲取到輸入到2-54的一個正整數。

            if (in % two != 0) {
                    askfive(in);//不是偶數,就只求5位
            } else if (in > 45) {
                    asksix(in);//大於45,就只求6位。
            } else {//都不是,就要求5位和6位。
                    askfive(in);
                    asksix(in);
            }
    }

        public static void askfive(byte in) {
                //求5位數。
                //先確定第一位最小值存不存在。
                for (int i = one; i <ten ; i++) {//第一位
                        for (int j = 0; j <ten ; j++) {//第二位
                                final int i0 = in - two * i - two * j;
                                if (i0 < ten&&i0>=0) {//求第一位等於第五位,第二位等於第四位,第三位是否滿足小於10的要求的數存在。
                                        System.out.println(i+""+j+""+i0+""+j+""+i);

                                }
                        }
                }
        }

        public static void asksix(byte in) {
                //求6位數。
                //先確定第一位最小值存不存在。
                for (int i = one; i <ten ; i++) {//第一位數
                        for (int j = 0; j <ten ; j++) {//第二位數
                               final int i1 = (in - two * i - two * j) / two;
                                if (i1 < ten&&i1>=0) {//第三位數成立
                                        System.out.println(i+""+j+""+ i1 +""+ i1 +""+j+""+i);
                                }

                        }

                }
        }

}

7.迴文數:

  程式碼如下:

    

public class Main {

    /*
    * 輸入:無
    * 輸出:迴文數
    *   格式要求:長度是四位的十進位制數。關於y軸對此,第一位等於第四位,第二位等於第三位。
    *              範圍是1001-9999.
    *   要求:從小到大。
    * */


    //程式設計思路:
    //1.從第一位為1,第二位為0,開始迴圈。
    //2、輸出所有這樣的數。


    public static void main(String[] args) {
        for (int i = 1; i <10 ; i++) {//第一位
            for (int j = 0; j < 10; j++) {//第二位
                System.out.println(i+""+j+""+j+""+i);
            }
        }
    }
}

8.特殊的數字:

  程式碼如下:

    

public class Main {
    final static byte ten = 10;//常量10;
    final static byte three = 3;//常量3;


    /*
    * 輸入:無
    * */

    /*
    * 輸出:n行,三位的十進位制
    * 格式要求:從小到大。
    * */


    //程式思路:
        //1、範圍是從100-999.而根據立方根來推斷,如果從立方根下手,最小要從105(1+125>100)開始迴圈,最大到962(8+216+729<999)
    // 2.對三個數迴圈,求和,判斷是否等於自己的10進位制。
    // 3.輸出所有相等的數。

    public static void main(String[] args) {
        for (int i = 105; i <963 ; i++) {
            int a = i % ten;//個位。
            int b = (i / ten)%ten;//十位位。
            int c = i/100 ;//百位。
            if (i == (Math.pow(a, three) + Math.pow(b, three) + Math.pow(c, three))) {
                System.out.println(i);
            }


                }

            }

        }

9.楊輝三角:

  程式碼如下:

    

import java.util.Scanner;

public class Main {


    /*
    * 輸入:整數n
    * 格式要求:n的範圍是1-34.
    * */

    /*
    * 輸出:n行,每一行是楊輝三角的數。
    * 格式要求,每一行的每個數要按順序輸出,並且要使用一個空格分隔。
    * */


    //程式思路:
        //1、輸入一個byte大小的數,n
        //2、根據Cn,迴圈和遞迴的方式來求每一行每一個數


    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        byte n = input.nextByte();//獲取整形n。

        askYh(n);

    }
    public static void askYh(byte n) {//求楊輝的某行。
        int b = n-1;//C的下方。
        if (b == 0) {//說明是第一行
            System.out.println("1");
        }
        for (int i = 0; i < n; i++) {//n行。
            for (int j = 0; j <=i; j++) {//對C的上方從0到i迴圈,不能大於i。
                int out = askJc(i, j) / askJc02(i, j);
                System.out.print(out + " ");
            }
            System.out.println();//換行。
        }
    }

    public static int askJc(int i,int j) {//求b!/i!
        //遞迴呼叫
        if (i == j + 1) {
            return i;
        }
        if (i == j) {//當c的上方和下方相同的時候,返回1.
            return 1;
        }
        return i*askJc(i-1,j);
    }

    public static int askJc02(int i,int j) {//求(b-i)!
        if ((i == j + 1)||(i == j)) //當i-j = 1 的和i=j的時候
            return 1;

         return (i - j) * askJc02(i - 1, j);
        }

    }
 1 import java.util.Scanner;
 2 
 3 public class test04 {
 4 
 5 
 6     /*
 7     * 輸入:整數n
 8     * 格式要求:n的範圍是1-34.
 9     * */
10 
11     /*
12     * 輸出:n行,每一行是楊輝三角的數。
13     * 格式要求,每一行的每個數要按順序輸出,並且要使用一個空格分隔。
14     * */
15 
16 
17     //程式思路:
18         //1、輸入一個byte大小的數,n
19         //2、根據Cn,迴圈和遞迴的方式來求每一行每一個數
20 
21 
22     public static void main(String[] args) {
23 
24         Scanner input = new Scanner(System.in);
25         byte n = input.nextByte();//獲取整形n。
26 
27         askYh(n);
28 
29     }
30     public static void askYh(byte n) {//求楊輝的某行。
31         int b = n-1;//C的下方。
32         if (b == 0) {//說明是第一行
33             System.out.println("1");
34         }
35         for (int i = 0; i < n; i++) {//n行。
36             for (int j = 0; j <=i; j++) {//對C的上方從0到n-1迴圈
37                 int out = askJc(i, j) / askJc02(i, j);
38                 System.out.print(out + " ");
39             }
40             System.out.println();//換行。
41         }
42     }
43 
44     public static int askJc(int i,int j) {//求b!/i!
45         //遞迴呼叫
46         if (i == j + 1) {
47             return i;
48         }
49         if (i == j) {//當c的上方和下方相同的時候,返回1.
50             return 1;
51         }
52         return i*askJc(i-1,j);
53     }
54 
55     public static int askJc02(int i,int j) {//求(b-i)!
56         if ((i == j + 1)||(i == j)) //當b-i = 1 或者i=j的時候。
57             return 1;
58 
59          return (i - j) * askJc02(i - 1, j);
60         }
61 
62     }

  //未完,待更。。。