20分钟,拿捏!1.封闭图形个数 - 蓝桥云课
1.数位排序 - 蓝桥云课
思路和数位循环一样,其实
先初始化数组,包含两个数组,一个数组arr用来统计输入的数字
另一个数组num用来统计每个数的封闭图形的个数
java"> static void init(){// 统计每个数字的封闭图形的个数num[1] = 0;num[2] = 0;num[3] = 0;num[5] = 0;num[7] = 0;num[0] =1;num[4] =1;num[6] =1;num[9] =1;num[8] =2;for (int i = 0; i <n ; i++) {arr[i] =in.nextInt();}}
然后计算每个元素的封闭图形的个数,
然后根据已经统计的0-9 每个数的封闭图形的个数 利用取余数的思想得到对应的数字,
然后将对应数字对应的封闭图形的个数加到sum中,
sum用来统计每一个输入的元素的封闭图形的总个数
java"> static int digit(int n){int sum = 0;while (n>0){sum = sum+ num[n%10];n = n /10;}return sum;}
然后利用Arrays.sort()函数进行二维排序lamda表达式
(两个排序条件)
条件1:现根据每个元素的封闭图形的总个数来进行升序排序
如果两个元素的封闭图形的总个数相等,就根据条件2进行排序
条件2,如果两个元素的封闭图形的总个数相同,就判断两个数字的大小,按照从小到大排序
java"> Arrays.sort(arr,(a,b)->{int sum1 = digit(a);int sum2 = digit(b);if(sum1!=sum2)return sum1-sum2;return a-b;});
完整代码如下:
java">
import javax.swing.*;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;/*** @author zb* date2025/3/21 16:08*/
public class Main {static Scanner in =new Scanner(System.in);static Integer n = in.nextInt();static Integer arr[] = new Integer[n];static int num[] = new int[10];static Integer cnt[] = new Integer[n];public static void main(String[] args) {
// 初始化输入的数组init();for (int i = 0; i <n ; i++) {cnt[i] =digit(arr[i]);}Arrays.sort(arr,(a,b)->{int sum1 = digit(a);int sum2 = digit(b);if(sum1!=sum2)return sum1-sum2;return a-b;});for (int i = 0; i <n ; i++) {System.out.print(arr[i]+" ");}in.close();}static void init(){// 统计每个数字的封闭图形的个数num[1] = 0;num[2] = 0;num[3] = 0;num[5] = 0;num[7] = 0;num[0] =1;num[4] =1;num[6] =1;num[9] =1;num[8] =2;for (int i = 0; i <n ; i++) {arr[i] =in.nextInt();}}
// 求每一个元素的封闭图形的个数static int digit(int n){int sum = 0;while (n>0){sum = sum+ num[n%10];n = n /10;}return sum;}
}
盲猜你也是跟着蓝桥14天速成训练营,加油了兄弟