admin 管理员组

文章数量: 887021

【蓝桥杯

🍓系列专栏:蓝桥杯

🍉个人主页:个人主页

目录

1.数位翻转

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

3.两数交换的几种方法

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

5.黑洞数(陷阱数)


1.数位翻转

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

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

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

    public static void main(String[] args) {//如: 整数 12345 返回结果为整数: 54321int 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 返回结果为整数: 54321int 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 返回结果为整数: 54321int 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;}}}

本文标签: 蓝桥杯