【蓝桥杯-筑基篇】基础入门

文章介绍了编程中常见的数位翻转的三种方法,包括取余、数组和字符串反转;探讨了求三个数最大值的简洁写法;展示了两种不使用额外变量的两数交换技巧;详细解释了身份证第18位校验码的计算过程;并讨论了黑洞数(陷阱数)的概念及其计算示例。
摘要由CSDN通过智能技术生成

🍓系列专栏:蓝桥杯

🍉个人主页:个人主页

目录

1.数位翻转

2.三个数求最大值的写法

3.两数交换的几种方法

4.身份证第18位合法性校验

5.黑洞数(陷阱数)


1.数位翻转

如: 整数 12345 返回结果为整数: 54321

当第一次看到这个题时,脑子里有3种反转方法:

​ 1、采用取余的方法,把每一位的值都抽取出来。

    public static void main(String[] args) {
        //如: 整数 12345 返回结果为整数: 54321
        int number=12345;
        int sum=0;
        while (number>0){
            sum=sum*10+number % 10;
            number=number/10;

        }
        System.out.println(sum);

    }

​ 2、第二种是把这个整数转换成一个数组,然后在进行反转。

    public static void main(String[] args) {
        //如: 整数 12345 返回结果为整数: 54321
        int number = 12345;
        String s = String.valueOf(number);
        char[] array = s.toCharArray();
        for (int i = array.length-1; i >=0; i--) {
            System.out.print(array[i]);
        }
    }

​ 3、第三种是 用   reverse() 进行字符串翻转

    public static void main(String[] args) {
        //如: 整数 12345 返回结果为整数: 54321
        int number = 12345;
        System.out.println(new StringBuilder(String.valueOf(number)).reverse().toString());


    }

2.三个数求最大值的写法

调用Math中的的max

public class Test {
    public static void main(String[] args) {
        int a=10;
        int b=5;
        int c=29;
        getMax(a,b,c);
    }

    private static void getMax(int a, int b, int c) {
        System.out.println(Math.max(Math.max(a, b), c));
    }

}

3.两数交换的几种方法

​ 1、定义一个临时变量

    public static void main(String[] args) {
        int a=10;
        int b=5;
        int temp=0;
        System.out.println("交换前:a:"+a+"  b:"+b);
        temp=a;
        a=b;
        b=temp;
        System.out.println("交换后:a:"+a+"  b:"+b);


    }

​ 2、采用加减法

    public static void main(String[] args) {
        int a=10;
        int b=5;
        System.out.println("交换前:a:"+a+"  b:"+b);
        a=a=b;
        b=a-b;
        a=a-b;
        System.out.println("交换后:a:"+a+"  b:"+b);


    }

​ 3、异或运算

    public static void main(String[] args) {
        int a=10;
        int b=5;
        System.out.println("交换前:a:"+a+"  b:"+b);
        a=a^b;
        b=a^b;
        a=a^b;
        System.out.println("交换后:a:"+a+"  b:"+b);


    }

4.身份证第18位合法性校验

身份证第18位(校验码)的计算方法

1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。

2、将这17位数字分别和系数相乘的结果相加。

3、用加出来的值  对11取余,看余数是多少。

4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X-9-8-7-6-5-4-3-2。

5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。

例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。

首先我们得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的数字是x。所以,可以判定这是一个合格的身份证号码。

    public static void main(String[] args) {
        int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
        String[] last={"1","0","X","9","8","7","6","5","4","3","2"};
        Scanner scanner = new Scanner(System.in);
        String idCard= scanner.nextLine();
        char[] array = idCard.toCharArray();
        int sum=0;
        for (int i = 0; i < array.length-1; i++) {
            sum=(array[i]-'0')*weight[i]+sum;
        }
        
        
        sum=sum%11;
        if (last[sum].equals(idCard.substring(17,18))){
            System.out.println("yes");
        }
        else System.out.println("no");


    }


 

5.黑洞数(陷阱数)

计算过程,给定一个数字,从大到小排列后减去从小到大排列,经过若干次运算后终得到一个固定的整数,三位数的黑洞495,四位数的黑洞6174等等。 

    public static void main(String[] args) {
        int number=2023;
        int count=0;

        while (true){
            String s = String.valueOf(number);
            int[] array = new int[s.length()];

            for (int i = 0; i < array.length; i++) {
                array[i] = Integer.parseInt(String.valueOf(s.charAt(i)));
            }
            System.out.println(Arrays.toString(array));
            Arrays.sort(array);
            System.out.println(Arrays.toString(array));
            int max=0;
            int min=0;

            for (int i = 0; i < array.length; i++) {
                min=array[i]+min*10;
            }
            for (int i = array.length-1; i >=0; i--) {
                max=max*10+array[i];
            }


            System.out.println(max+"  "+min);
            number=max-min;
            count++;
            if (count==20){
                break;
            }

        }







    }

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱编程的小白白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值