蓝桥杯——————数位排序(java)

news/2025/3/26 19:22:59/

怎么说呢,实在是想不明白我这冒泡排序好像也没有问题呀,但是为甚么最后排序玩之后,会出现11在2 前面呢?

有点逆天,

java">package Lanqiao;import java.util.Scanner;/*** @author zb* date2025/3/21 10:24*/
public class L2122 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n  = in.nextInt();int m = in.nextInt();
//        防止越界int a[] = new int[n+12];for (int i = 1; i <=n ; i++) {a[i] = i;}
//        冒泡排序for (int i = 1; i <n; i++) {for (int j = i+1; j <=n ; j++) {if(check(a[i],a[j])){int temp = a[i];a[i] =a[j] ;a[j] =temp;}}}for (int i = 1; i <=n ; i++) {System.out.print(a[i]+" ");}System.out.println(a[m]);in.close();}static boolean  check(int x, int y){int sum1 = 0 ;int sum2 = 0 ;
//        计算两个数的各个位数的和while (x>0){sum1 += x%10;x = x /  10 ;}  while (y>0){sum2 += y%10;y = y /  10 ;}
//        如果前面那个哥哥位数的和比后面那个大,交换这两个元素if(sum1>sum2){return true;}else {return false;}}
}

看了半天解析;

总结一下就是使用Arrays。sort()

这是核心代码部分o1和o2是数组中的两个任意的元素,然后题目要求

首先按照数位和从小到大排列,

如果数位和大小相等那么就比较两个数本身的大小,小的放前面

当 sumB - sumA > 0(即 sumA < sumB)时,o1 会被排在 o2 前面,无论它们是否相邻。

当 o1 - o2 < 0(即 o1 < o2)时,数位和相同的 o1 会排在前面。

 按照数位和从小到da排序,数位和相同,就会比较o1o2的大小按照数字o1,o2从小到大排序(数字本身是不会相同的,除非o1,o2是同一个数字,当然这是不可能,因为比较器就是比较的是任意两个不同的数字o1,o2)

java">      Arrays.sort(a,(o1,o2)->{int sumA = digitsum(o1);int sumB = digitsum(o2);return (sumA!=sumB)?sumB-sumA:o1-o2;});

 这里也可以写成下面这种,这种可能更清晰一点

java">Arrays.sort(a, (o1, o2) -> {int sumA = digitsum(o1); // 计算o1的数位和int sumB = digitsum(o2); // 计算o2的数位和if (sumA != sumB) {return sumA - sumB; // 关键点:返回差值!}return o1 - o2; // 数位和相同时比较数值
});

我的理解就是这其实相当于高考的时候理科报志愿,如果两个人分数相同,先看数学谁考的高如果数学分数相同,再看物理多少分这种

 看一下运行结果

如果改变sumA和sumB 的位置,比如改成下面这种

java">     Arrays.sort(a,(o1,o2)->{int sumA = digitsum(o1);int sumB = digitsum(o2);return (sumA!=sumB)?sumB-sumA:o1-o2;});

 就会按照数位和从大到小排序,数位和相同,按照数字从小到大排序

总结一下,就是

如果o1 o2的初始顺序和返回条件的顺序是 相同的,那么就是升序排序,否则就是降序排序

java">
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;/*** @author zb* date2025/3/21 10:24*/
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n =in.nextInt();int m = in.nextInt();Integer a[] =new Integer[n];
//        初始化数组for (int i = 0; i <n ; i++) {a[i] = i+1;}Arrays.sort(a,(o1,o2)->{int sumA = digitsum(o1);int sumB = digitsum(o2);return (sumA!=sumB)?sumA-sumB:o1-o2;});
//        for (int i = 0; i <n ; i++) {
//            System.out.print(a[i]+" ");
//        }System.out.println(a[m-1]);in.close();}
//    求数位和static int digitsum(int n){int sum = 0  ;while (n>0){sum = sum + n%10 ;n = n/10 ;}return sum;}
}
//class Mycomparator implements Comparator<Integer>{
//
//    @Override
//    public int compare(Integer o1, Integer o2) {
//        if(o1<o2){
//            return 1;
//        } else if (o1>o2){
//            return -1;
//        }
//        return 0;
//    }
//}


http://www.ppmy.cn/news/1582806.html

相关文章

【深度学习入门_机器学习理论】梯度提升决策树(GBDT)

梯度提升决策树是一种集成技术&#xff0c;通过结合多个基础学习器&#xff08;通常是决策树&#xff09;的预测&#xff0c;生成一个强大的模型。与传统的提升方法不同&#xff0c;GBDT通过添加新的树来优化损失函数&#xff0c;这些新的树修正了之前树所犯的错误。这种顺序学…

阿里的MNN源码如何编译成so文件,供Android调用

在Ubtuntu下面的编译&#xff0c;先整理编译环境 1、安装环境依赖 # 安装必要工具 sudo apt update sudo apt install -y cmake ninja-build git wget # 安装Android NDK&#xff08;建议使用r21版本或更高&#xff09; wget https://dl.google.com/android/repository/a…

本地安装deepseek大模型,并使用 python 调用

首先进入 ollama 官网 https://ollama.com/点击下载 下载完成后所有都是下一步&#xff0c;就可以 点击搜索 Models &#xff1a; https://ollama.com/search然后点击下载&#xff1a; 选择后复制: ollama run deepseek-r1:32b例如&#xff1a; 让它安装完成后&#xff1…

某个业务采用【规则引擎】重构大幅降低耗时

需求分析 需求&#xff1a;由于业务的计算规则比较复杂&#xff0c;经过几年的规则迭代。后续维护维护起来比较麻烦&#xff0c;所以花了2周时间进行重构。本次采用Liteflow规则引擎进行重构&#xff0c;好处在于规则配置在xml配置文件中可以清晰的梳理业务的流向&#xff0c;在…

OpenRAND可重复的随机数生成库

OpenRAND 是一个 C++ 库,旨在通过提供强大且可复制的随机数生成解决方案来促进可重复的科学研究。它是一个简单的仅头文件库,性能可移植,统计稳健,并且易于集成到任何 HPC 计算项目中。 特征 跨平台支持:OpenRAND 旨在跨各种平台无缝工作,包括 CPU 和 GPU。其仅标题库设计…

MySQL 设置允许远程连接完整指南:安全与效率并重

一、为什么需要远程连接MySQL&#xff1f; 在分布式系统架构中&#xff0c;应用程序与数据库往往部署在不同服务器。例如&#xff1a; Web服务器&#xff08;如NginxPHP&#xff09;需要连接独立的MySQL数据库数据分析师通过BI工具直连生产库多服务器集群间的数据同步 但直接…

如何让自动驾驶汽车“看清”世界?坐标映射与数据融合概述

在自动驾驶领域,多传感器融合技术是实现车辆环境感知和决策控制的关键。其中,坐标系映射和对应是多传感器融合的重要环节,它涉及到不同传感器数据在统一坐标系下的转换和匹配,以实现对车辆周围环境的准确感知。本文将介绍多传感器融合中坐标系映射和对应的数学基础和实际应…

Kotlin v2.1.20 发布,标准库又有哪些变化?

大家吼哇&#xff01;就在三小时前&#xff0c;Kotlin v2.1.20 发布了&#xff0c;更新的内容也已经在官网上更新&#xff1a;What’s new in Kotlin 2.1.20 。 我粗略地看了一下&#xff0c;下面为大家选出一些我比较感兴趣、且你可能也会感兴趣的内容。 注意&#xff01;这里…