【备战秋招】每日一题:华东师范大学保研机试-2022-整数排序

news2024/9/20 18:30:35

为了更好的阅读体检,可以查看我的算法学习博客华东师范大学保研机试-2022-整数排序

题目内容

输入若干个int类型整数,将整数按照位数由大到小排序,如果位数相同,则按照整数本身从小到大排序。

例如,

输入:10 -3 1 23 89 100 9 -123

输出:-123 100 10 23 89 -3 1 9

输入的整数个数最多不超过10^6个。

输入格式

在一行中输入若干个整数,整数之间用一个空格分隔。

输出格式

在一行中输出排序好的整数,整数之间用一个空格分隔。

样例

input1

10 -3 1 23 89 100 9 -123

ouput1

-123 100 10 23 89 -3 1 9

input2

1 -2 12

ouput2

12 -2 1

题解

思路

1.这是一类经典的条件排序问题,它就是排序问题的小变形。具体到语法上就是一个结构体排序

2.由于题目说明了数组长度n=10^6。所以就不要自己写冒泡排序等比较慢的排序了。在C++可直接使用STL中的排序函数函数:sort()。而且就算是你会手写快排,也不建议这么做。因为一方面是比赛的时候浪费时间,另一方面是STL中的sort加了很多优化,它比你手写的快排还会更快。

使用方法

// 1.需要的头文件
#include <algorithm>
// 如果不想记这么多繁杂的头文件,你永远可以相信<万能头文件>,它包罗万象了,至少各种比赛,机试是够用的。
#include <bits/stdc++.h>
​
// 2.sort的使用方法
sort (起始地址,结束地址的下一位,自定义排序函数的函数名)
// 起始/结束地址:传入对应的指针,一定要注意是结束的地址的下一位!
// 自定义排序函数:告诉sort函数将如何比较两个数,谁放在前面,谁放在后面。不传参时默认是升序排序。
​
// 3.具体案例1:给定一个整数数组a,我们希望对其下标为[l,r]的区域<升序>排序
sort(a + l , a + r + 1)

Copy

回到这道题,它的关键其实就是构造自定义排序函数。我们来展开讲一讲这一点。

//具体案例2:给定一个整数数组a,我们希望对其下标为[l,r]的区域<降序>排序
​
//这时我们可以自己构造一个自定义排序的函数cmp(函数名随意命名),然后将函数名填入第三个参数(这个在语法上叫做函数传参,本质是传递函数指针)
sort(a + l , a + r + 1 , cmp);
​
​
// 返回值为bool型,传入两个参数a , b
// 这个函数的作用是告诉sort函数将如何比较两个数。当返回true的时候将a放在b之前,返回false的时候将b放在a之前
bool cmp (const int& a , const int& b){
    //if (a > b) return true;
    //else return false;
    //利用语法特性,直接返回逻辑表达式
    return a > b;
}
​
// 更多解释:1.利用引用变量是为了加快速度,减少拷贝时间。2.使用const修饰是为了防止我们误改内容。
//所以你不加这两个,直接写int a , int b 也不会有问题,只是不规范罢了。

Copy

所以这题的关键就是构造自定义排序函数cmp。代码如下:

#include <bits/stdc++.h>
using namespace std;
struct Val{
    int dig; // 数位长度
    int val; // 数字
};
Val a[1000006];
// 获得数位长度
int getDig (int val){
    val = abs(val);
    int ans = 0;
    while (val){
        ans ++;
        val /= 10;
    }
    return ans;
}
int cmp (const Val & a , const Val& b){
    if (a.dig != b.dig)
        return a.dig > b.dig;
    return a.val < b.val;
}
int main() {
    int x , n = 0;
    while (cin >> x) {
        a[++n].val = x;
        a[n].dig = getDig(a[n].val);
    }
    sort(a + 1 , a + n + 1 , cmp);
    for (int i = 1 ; i <= n ; i++){
        cout << a[i].val;
        if (i == n) cout << endl;
        else cout << " ";
    }
    return 0;
}

Copy

总结

考察知识点:条件排序问题

评价:这是机试第一题,难度比较小。如果平时有在刷题应该是能秒掉的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/660108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【第四次】21级计科计算机组成原理课外练习

【第四次】21级计科计算机组成原理课外练习 一、判断题二、单选题三、多选题四、填空题五、程序填空题 一、判断题 1-1 设机器数字长8位&#xff08;含1位符号位&#xff09;&#xff0c;若机器数BAH为原码&#xff0c;算术右移一位得到的结果为 9D H 。 T F 1-2 ALU中采用双…

spring 反射,BigDecimal,自定义注解的使用(aop)

反射 利用反射调用它类中的属性和方法时&#xff0c;无视修饰符。 获取Class类的对象&#xff08;三种方式&#xff09; Class.forName(“全类名”) &#xff08;推荐使用&#xff09;类名.class对象.getClass() 反射获取构造方法Constructor<?>[] getConstructors()…

Android 逆向之脱壳实战篇

作者&#xff1a;37手游安卓团队 前言 这篇文章比较干&#xff0c;比较偏实战&#xff0c;看之前建议先喝足水&#xff0c;慎入。 在学脱壳之前&#xff0c;我们先来复习一下&#xff0c;什么时候是加固&#xff1f; 加固本质上就是对 dex 文件进行加壳处理&#xff0c;让一些…

信号三大阶段之储存信号

目录 一、 信号三大阶段 二、信号储存相关概念 三、 理解概念 四、信号储存原理 五、信号集操作函数 一、 信号三大阶段 二、信号储存相关概念 实际执行信号的过程被称为信号递达&#xff08;Delivery&#xff09;。信号从产生到递达之间的状态被称为信号未决&#xff08;…

【Linux】初步认识Linux系统

Linux 操作系统 主要作用是管理好硬件设备&#xff0c;并为用户和应用程序提供一个简单的接口&#xff0c;以便于使用。 作为中间人&#xff0c;连接硬件和软件 常见操作系统 桌面操作系统 WindowsmacOsLinux 服务器操作系统 LinuxWindows Server 嵌入式操作系统 Linux …

从零搭建一台基于ROS的自动驾驶车-----1.整体介绍

系列文章目录 北科天绘 16线3维激光雷达开发教程 基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图 Nvidia Jetson Nano学习笔记–串口通信 Nvidia Jetson Nano学习笔记–使用C语言实现GPIO 输入输出 Autolabor ROS机器人教程 文章目录 系列文章目录前言一、小车底盘二、激…

Redis入门(三)

第5章 Redis的相关配置(redis.conf) 1&#xff09;计量单位说明,大小写不敏感 # 1k > 1000 bytes # 1kb > 1024 bytes # 1m > 1000000 bytes # 1mb > 1024*1024 bytes # 1g > 1000000000 bytes # 1gb > 1024*1024*1024 bytes # # units are case insensiti…

如何安装Apache服务

目录 什么是Apache 第一步 关闭防火墙和安全机制 第二步 系​统​上​定​义 SELinux 最​高​级​别 第三步 导入对应的依赖包并解包 第四步 安装依赖环境 第五步 移动相关文件 第六步 编译安装 第七步 编译 第八步 备份配置文件 第九步 优化执行路径 第十步 添加…

S32K324芯片学习笔记-实时控制系统-eMIOS

文章目录 Enhanced Modular IO Subsystem (eMIOS)eMISO配置通道类型通道配置BCTU Interface 简介功能框图Unified channels (UC)Buffered modesUC control and datapath diagramUC modesGPIO模式SAIC (Single Action Input Capture)模式Single Action Output Capture (SAOC) mo…

AI自动写代码:GitHub copilot插件在Idea的安装和使用教程

GitHub Copilot 是微软与OpenAI共同推出的一款AI编程工具&#xff0c;基于GitHub及其他网站的源代码&#xff0c;根据上文提示为程序员自动编写下文代码&#xff0c;可以极大地提高编写代码的效率。 先看看ChatGpt是怎么回答Copilot的功能特点&#xff1a; 给大家简单提取一…

【go】新手go module 踩坑入门rc_server

go1.3 后废弃了GOPATH 但是gomodule 要自己设置 :go env -w GO111MODULE=auto Microsoft Windows [版本 10.0.22621.1848] © Microsoft Corporation。保留所有权利。 C:\Users\zhangbin>adb connect 127.0.0.1:7555 connected to 127.0.0.1:7555 C:\Users\zhangbin&…

【计算机通识】未来的计算机

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、未来的计算机 2.1、光子计算机 2.2、生物计算机 2.3、量子计算机 3、总结 1、缘起 自然界中的一切事物都是处…

3d重建+神经渲染

3d重建 基于深度相机(结构光、TOF、双目摄像头)的三维重建基于图像的三维重建&#xff1a;深度学习基于视觉几何的传统三维重建&#xff1a;这种三维重建方法研究时间比较久远&#xff0c;技术相对成熟。主要通过多视角图像对采集数据的相机位置进行估计&#xff0c;再通过图像…

经典同步问题之哲学家就餐

文章目录 一&#xff1a;问题描述方案一&#xff1a;方案二&#xff1a;方案三&#xff1a; 一&#xff1a;问题描述 五个哲学家共用一张圆桌&#xff0c;分别坐在周围的五张椅子上&#xff0c;在圆桌上有五个碗和五只筷子&#xff0c;他们的生活方式是交替的进行思考和进餐。…

2023年测试岗前景?为什么要做自动化测试?8年测试总结...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 自动化测试是把以…

Web网页制作期末复习(2)——常用文本标签、列表标签、表格标签、Form表单、块元素与行内元素(内联元素)

目录 常用文本标签 列表标签 有序列表 无序列表 定义列表 表格标签 表格组成与特点 表格标签 表格属性 ​​​合并表格单元格 Form表单 属性说明 表单元素 文本框 密码框 提交按钮 块元素与行内元素&#xff08;内联元素&#xff09; 内联元素和块级元素…

3、DuiLib了解xml的使用和布局

文章目录 1、了解 XML 使用和布局2、VerticalLayout和HorizontalLayout3、TabLayout4、TileLayout5、Container6、ChildLayout 1、了解 XML 使用和布局 本节主要介绍 DuiLib 中 XML 关键字的使用和一些特性&#xff0c;通过构建一个简单的带标题栏和简单结构的窗口&#xff0c…

模型分享---登陆注册界面

目录 模型---登陆注册界面 验证码的生成&#xff1a; CheckCodeUtil.java&#xff1a; Servlet: 普通用户登陆&#xff1a; css: jsp: 运行结果&#xff1a; 管理员登陆&#xff1a; 运行结果&#xff1a; 注册&#xff1a; 普通用户&#xff1a; css: jsp: 运行…

FreeRTOS实时操作系统(三)任务挂起与恢复

系列文章目录 FreeRTOS实时操作系统&#xff08;一&#xff09;RTOS的基本概念 FreeRTOS实时操作系统&#xff08;二&#xff09;任务创建与任务删除&#xff08;HAL库&#xff09; 文章目录 系列文章目录前言任务挂起与恢复普通挂起恢复实例中断恢复实例 前言 继续跟着正点…

记录--封装一个通过js调用的全局vue组件

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 在使用vue项目编写的时候&#xff0c;不可避免的会碰到需要时js api来调用组件进行显示的情况 例如饿了么element ui 的 Notification 通知、Message 消息提示等组件 虽然已经提供了&#xff0c;…