模拟、排序(归并排序)算法

news2024/11/24 12:08:01

模拟、排序算法

  • 一、模拟
    • 例题
      • 1、错误票据
        • 题目信息
        • 思路
        • 题解
      • 2、回文日期
        • 题目信息
        • 思路
          • 方法一:暴力做法
          • 方法二:优化解法
        • 题解
          • 方法一:暴力求解
          • 方法二:优化解法
  • 二、排序
    • 例题
      • 1、归并排序
        • 题目信息
        • 思路
        • 题解

一、模拟

例题

1、错误票据

题目信息

在这里插入图片描述

思路

先对数组进行排序,然后遍历数组,如果出现两个一样的,就是重号,如果连续的两个数之间相差大于1就是断号

题解
#include <bits/stdc++.h>
#define int long long 
#define endl '\n'
#define maxsize 10010
using namespace std;

int n;
int a[maxsize];

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    int m=0;
    string line;
    stringstream ss;
    getline(cin,line);   //因为getline可以读入换行,消除前面一个输入的换行
    for(int i=0;i<n;i++)
    {
        getline(cin,line);
        ss<<line;
        while(ss>>a[m]) m++;
        ss.clear();
    }
    sort(a,a+m);
    int res1,res2;
    for(int i=1;i<m;i++)
    {
        if(a[i]==a[i-1]) res1=a[i];
        if(a[i]-a[i-1]>1) res2=a[i]-1;
    }
    cout<<res2<<" "<<res1<<endl;
    return 0;
}

stingstream的用法可以参考以下文章:
stringstream用法总结

2、回文日期

题目信息

在这里插入图片描述

思路
方法一:暴力做法

枚举date1到date2的所有数字:
(1)判断是否是回文数
(2)判断这个回文数是否符合日期

方法二:优化解法

(1)枚举回文数
只要枚举前4个,后4个将前4个颠倒即可形成一个回文数
所以枚举的范围为1000~9999
(2)判断数字是否在范围中
判断形成的回文数是否在刚刚输入的两个日期中
(3)判断是否符合日期

题解
方法一:暴力求解
#include <bits/stdc++.h>
#define int long long 
#define endl '\n'
using namespace std;

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    string date1,date2;
    cin>>date1>>date2;
    stringstream ss1,ss2;
    int d1,d2;
    ss1<<date1;
    ss2<<date2;
    ss1>>d1;
    ss2>>d2;
    int count=0;
    for(int i=d1;i<=d2;i++)
    {
        int tmp=i;
        int res=0;
        while(tmp>0)
        {
            res=res*10+tmp%10;
            tmp /=10;
        }
        if(i==res){
            int date=i%100;
            int month =(i%10000)/100;
            int year=i/10000;
            if((year%4==0&&year%100!=0)||year%400==0)
            {
                if(month==2)
                {
                    if(date>=1&&date<=29) count++;
                }
            }else{
                if(month==2)
                {
                    if(date>=1&&date<=28) count++;
                }
            }
            if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
            {
                if(date>=1&&date<=31) count++;
            }else if(month==4||month==6||month==9||month==11)
            {
                if(date>=1&&date<=30) count++;
            }
        }
    }
    cout<<count<<endl;
    return 0;
}
方法二:优化解法
#include <bits/stdc++.h>
#define int long long 
#define endl '\n'
using namespace std;

//优化解法
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    string date1,date2;
    stringstream ss1,ss2;
    int d1,d2;
    cin>>date1>>date2;
    ss1<<date1;
    ss2<<date2;
    ss1>>d1;
    ss2>>d2;
    int count=0;
    for(int i=1000;i<=9999;i++)
    {
        int tmp=i;
        int res=i;
        while(tmp>0)
        {
            res=res*10+tmp%10;
            tmp /=10;
        }
        if(res>=d1&&res<=d2)
        {
            int date=res%100;
            int month =(res%10000)/100;
            int year=res/10000;
            if((year%4==0&&year%100!=0)||year%400==0)
            {
                if(month==2)
                {
                    if(date>=1&&date<=29) count++;
                }
            }else{
                if(month==2)
                {
                    if(date>=1&&date<=28) count++;
                }
            }
            if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
            {
                if(date>=1&&date<=31) count++;
            }else if(month==4||month==6||month==9||month==11)
            {
                if(date>=1&&date<=30) count++;
            }
        }
    }
    cout<<count<<endl;
    return 0;
}

二、排序

例题

1、归并排序

题目信息
思路
题解

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

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

相关文章

AI副业项目分享

在上一篇文章《这才是大学生该做的副业&#xff0c;别再痴迷于游戏了&#xff01;》中&#xff0c;我分享了一些副业的想法&#xff0c;接着有不少同学问我&#xff1a;具体如何做&#xff1f;这是真把我给整蒙了&#xff0c;这里分享下我可以提供的产品和服务吧&#xff0c;并…

实用区块链应用:去中心化投票系统的部署与实施

一、需求分析背景 随着技术的发展&#xff0c;传统的投票系统面临着越来越多的挑战&#xff0c;如中心化控制、透明度不足和易受攻击等问题。为了解决这些问题&#xff0c;我们可以利用区块链技术去中心化、透明性和安全性来构建一个去中心化投票系统。这样的系统能够确保投票过…

【某机构vip教程】python(6):python读取ini的配置文件

python读取ini的配置文件 configparser模块简介&#xff1a; configparser模块是用来解析ini配置文件的解析器。 ini配置文件的结构如x下图 ini文件结构需要注意以下几点&#xff1a; 键值对可用或者:进行分隔 section的名字是区分大小写的,而key的名字是不区分大小写的 …

Redis(十五)Bitmap、Hyperloglog、GEO案例、布隆过滤器

文章目录 面试题常见统计类型聚合统计排序统计二值统计基数统计 Hyperloglog专有名词UV&#xff08;Unique Visitor&#xff09;独立访客PV&#xff08;Page View&#xff09;页面浏览量DAU&#xff08;Daily Active User&#xff09;日活跃用户量MAU&#xff08;Monthly Activ…

【2024软件测试面试必会技能】Appium自动化(6):原生app元素定位方法

元素定位方法介绍及应用&#xff1a; Appium方法定位原生app元素: 通过appium inspector工具&#xff0c;可以获取元素的相关信息&#xff1b;在appium中提供了一系列的元素定位API&#xff0c;通过在这些API中输入指定的元素信息&#xff0c;就能完成元素定位&#xff0c;定…

学习Redis基础篇

1.初识Redis 1.认识NoSQL 2.认识Redis 3.连接redis命令 4.数据结构的介绍 5.通用命令 2.数据类型 1.String类型 常见命令&#xff1a;例子&#xff1a;set key value

【Linux 内核源码分析】内存管理——伙伴分配器

在Linux操作系统中&#xff0c;内存分配通常由内核中的内存管理模块完成。以下是三个主要的内存分配器&#xff1a; 伙伴系统 (Buddy System)&#xff1a;这是内核中最基本的分配器&#xff0c;用于分配物理内存。伙伴系统将内存块组织成不同大小的伙伴&#xff0c;以便有效地分…

电脑c盘太满了怎么办?5个必备的好方法~

随着我们在电脑上存储和安装越来越多的文件和程序&#xff0c;C盘的空间可能会迅速减少&#xff0c;甚至变得过于拥挤。当C盘空间不足时&#xff0c;会影响电脑的运行速度和性能&#xff0c;甚至导致系统崩溃。本文将介绍一些解决C盘空间不足问题的方法&#xff0c;帮助你更好地…

git中将所有修改的文件上传到暂存区

案例&#xff1a; 我将本地的多个文件进行了修改&#xff0c;导致文件发生了变化。使用git status命令&#xff0c;查看文件的状态&#xff0c;发现有多个文件是modified&#xff0c;即被修改了。 本地文件发生了变化&#xff0c;需要将modified的文件添加到暂存区&#xff0c…

【Git工具实战】实用真实 Git 开发工作流程

前言 最近工作中发现&#xff0c;很多开发人员连最基本的Git怎么使用都不知道&#xff0c;比如什么时候切分支&#xff0c;什么时候合并代码&#xff0c;代码遇到冲突怎么办&#xff0c;经常出现掉代码&#xff0c;代码合并后丢失的情况。以下为个人总结的常规Git开发工作流程…

Python实战:读取MATLAB文件数据(.mat文件)

Python实战&#xff1a;读取MATLAB文件数据(.mat文件) &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望得到您的订阅…

七分钟交友匿名聊天室源码

应用介绍 本文来自&#xff1a;七分钟交友匿名聊天室源码 - 源码1688 简介&#xff1a; 多人在线聊天交友工具&#xff0c;无需注册即可畅所欲言&#xff01;你也可以放心讲述自己的故事&#xff0c;说出自己的秘密&#xff0c;因为谁也不知道对方是谁。 运行说明&#xff…

docker镜像和容器的关系

背景 镜像和容器都是docker中非常重要的概念&#xff0c;镜像是静态的&#xff0c;而容器是动态的&#xff0c;两者的关系就类似类和实例的关系&#xff0c;本文就来分析下两者的关联 镜像和容器 我们知道镜像是存放在仓库中的静态的文件&#xff0c;而容器是运行中的进程&a…

厌倦了混乱的代码?掌握编写干净代码库的艺术

对于入门的开发人员来说&#xff0c;虽然克服了最初的障碍&#xff0c;学会了编程&#xff0c;找到了理想的工作。但其编程旅程并没有就此结束。他们面临真正的挑战&#xff1a;如何编写更好的代码。这不仅仅是为了完善功能&#xff0c;还要编写出经得起时间考验的优雅、可维护…

HTML5 Canvas 限定文本区域大小,文字自动换行,自动缩放

<!DOCTYPE html> <html> <body><h1>HTML5 Canvas 限定文本展示范围、自动计算缩放字体大小</h1><div id"tips">0</div> <div id"content">良田千顷不过一日三餐广厦万间只睡卧榻三尺良田千顷不过一日三餐…

发电机组启动前的准备和检查注意事项

发电机组启动前的准备&#xff1a; 1.检查润滑油的油位、 冷却液液位、燃油量&#xff1b; 2.检查机的供油、润滑、冷却等系统各个管路及接头有无漏油漏水现象&#xff1b; 3.检查电气线路有无破皮等漏电隐患&#xff0c;接地线电气线路是否松动&#xff0c;机组与基础的连接是…

MES系统中的手动排产和自动排产-助力生产效率

企业在排产管理中面临的问题&#xff1a; 大多数的企业在调度排产过程中&#xff0c;都会遇到以下问题。首先是插单非常的多&#xff0c;计划调整困难&#xff0c;会经常性的发生原材料、零部件的备货不足。计划按MRP或库存展示计算出需求后将产生大量工单&#xff0c;这些工单…

transformer 最简单学习1 输入层embeddings layer,词向量的生成和位置编码

词向量的生成可以通过嵌入层&#xff08;Embedding Layer&#xff09;来完成。嵌入层是神经网络中的一种常用层&#xff0c;用于将离散的词索引转换为密集的词向量。以下是一个典型的步骤&#xff1a; 建立词表&#xff1a;首先&#xff0c;需要从训练数据中收集所有的词汇&…

vue 常用库

vue-cropper 一个优雅的图片裁剪插件 dayjs Day.js 是一个轻量的处理时间和日期的 JavaScript 库&#xff0c;和 Moment.js 的 API 设计保持完全一样 NutUI-Bingo 基于 NutUI 的抽奖组件库&#xff0c;助力营销活动和小游戏场景。

java面试题之mybatis篇

什么是ORM&#xff1f; ORM&#xff08;Object/Relational Mapping&#xff09;即对象关系映射&#xff0c;是一种数据持久化技术。它在对象模型和关系型数据库直接建立起对应关系&#xff0c;并且提供一种机制&#xff0c;通过JavaBean对象去操作数据库表的数据。 MyBatis通过…