L1-027 出租(PTA)

news2024/11/29 6:38:06

文章目录

  • L1-027 出租
    • 题目描述
    • 模拟
    • 哈希表+二分查找

L1-027 出租

题目描述

下面是新浪微博上曾经很火的一张图:
在这里插入图片描述
一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对应 arr[0]=8,index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100。

本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。

输入格式:
输入在一行中给出一个由11位数字组成的手机号码。

输出格式:
为输入的号码生成代码的前两行,其中arr中的数字必须按递减顺序给出。

输入样例:

18013820100

输出样例:

int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};

模拟

这段代码的目的是将一个11位的电话号码转换成两个数组:arr数组和index数组,其中arr数组包含电话号码中的不重复数字,且按照递减顺序排列;index数组中的每个元素表示电话号码中对应位置的数字在arr数组中的索引。下面是代码的详细注释:

#include<bits/stdc++.h>
using namespace std;

int a[20],b[20],c[20]; // 分别用于存储数字出现的次数,arr数组,index数组

int main()
{
    string s; // 用于接收输入的电话号码
    cin >> s; // 从标准输入读取电话号码
    // 计算每个数字出现的次数
    for(int i = 0; i < s.size(); i++)
        a[s[i] - '0']++; // '0'到'9'的ASCII码值映射到0到9,增加对应数字出现的次数
    
    int k = 0; // 用于记录arr数组的长度,即电话号码中不重复数字的数量
    // 从大到小遍历可能出现的数字,将出现过的数字加入到b数组(即arr数组)
    for(int i = 9; i >= 0; i--)
        if(a[i] != 0)
            b[k++] = i;
    
    // 遍历电话号码的每个数字,找出它在arr数组中的索引,存入c数组(即index数组)
    for(int i = 0; i < s.size(); i++)
        for(int j = 0; j < k; j++)
            if(s[i] - '0' == b[j])
            {
                c[i] = j; // 将索引存入c数组
                break; // 找到索引后跳出内层循环
            }
    
    // 输出arr数组
    printf("int[] arr = new int[]{");
    for(int i = 0; i < k; i++)
        if(i != k - 1)
            printf("%d,", b[i]); // 对于不是最后一个元素,后面加逗号
        else
            printf("%d};\n", b[i]); // 最后一个元素后面加"};\n"
    
    // 输出index数组
    printf("int[] index = new int[]{");
    for(int i = 0; i < 11; i++)
        if(i != 11 - 1)
            printf("%d,", c[i]); // 对于不是最后一个元素,后面加逗号
        else
            printf("%d};", c[i]); // 最后一个元素后面加"};"
    return 0;
}

这段代码通过三个数组实现了功能:a数组用于记录每个数字(0到9)在电话号码中出现的次数;b数组存储了电话号码中出现的不重复数字,按照递减顺序排列,实际上即为所需的arr数组;c数组存储了电话号码中每个数字在b数组(即arr数组)中的索引位置,即为所需的index数组。

最终,程序通过遍历电话号码,利用a数组统计数字出现次数,由此构造b数组(arr),再通过与b数组的匹配来填充c数组(index),最后格式化输出这两个数组。

哈希表+二分查找

这段代码的目的是将输入的11位电话号码转换成两个特定格式的数组:一个是arr数组,包含电话号码中的唯一数字,按照从大到小的顺序排列;另一个是index数组,表示电话号码中每个数字按arr数组排序后的索引位置。下面是代码的详细解析:

// 引入必要的库文件
#include<bits/stdc++.h>
using namespace std;

vector<int> res; // 用于存储电话号码每个数字在arr数组中的索引

int main()
{
    string s; // 用于存储输入的电话号码
    cin >> s; // 读取输入的电话号码
    // 使用unordered_set从电话号码中提取唯一的数字
    unordered_set<char> num(s.begin(), s.end());  
    // 将提取出来的唯一数字复制到vector容器n中,方便后续操作
    vector<char> n(num.begin(), num.end());
    // 对容器n中的数字进行降序排序
    sort(n.begin(), n.end(), greater<char>());

    // 遍历电话号码的每个数字,找出它在n中的位置索引
    for(char i : s)
    {
        int l = 0, r = s.size() - 1; // 初始化二分搜索的左右指针
        while(l < r)
        {
            int mid = (l + r) >> 1; // 计算中点
            if(n[mid] <= i) r = mid; // 如果中点元素小于等于当前元素,调整右指针
            else l = mid + 1; // 否则调整左指针
        }
        res.push_back(l); // 将当前元素在n中的位置索引加入到res中
    }

    // 输出arr数组
    printf("int[] arr = new int[]{");
    for(int i = 0; i < n.size(); i++)
    {
        if(i != n.size() - 1)
            printf("%c,", n[i]); // 对于数组的前n-1个元素,在其后添加逗号
        else
            printf("%c};\n", n[i]); // 对于数组的最后一个元素,在其后添加"};\n"以结束数组声明
    }

    // 输出index数组
    printf("int[] index = new int[]{");
    for(int i = 0; i < res.size(); i++)
    {
        if(i != res.size() - 1)
            printf("%d,", res[i]); // 对于数组的前n-1个索引,在其后添加逗号
        else
            printf("%d};", res[i]); // 对于数组的最后一个索引,在其后添加"};"以结束数组声明
    }
    return 0;
}

代码的关键是使用unordered_set来去除重复的数字,以及通过降序排序来确保arr数组中的数字是从大到小排列的。对于index数组的生成,则通过对每个数字在排序后的vector中进行二分查找其索引位置,最后按照指定格式输出这两个数组。

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

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

相关文章

C#,图论与图算法,有向图(Graph)之环(Cycle)判断的颜色算法与源代码

1 检查该图是否包含循环 给定一个有向图,检查该图是否包含循环。如果给定的图形至少包含一个循环,则函数应返回true,否则返回false。 方法:深度优先遍历可用于检测图中的循环。连接图的DFS生成树。只有当图中存在后缘时,图中才存在循环。后边是从节点到自身(自循环)或…

锂电极片生产中机器视觉系统的多元检测能力

随着新能源行业的快速发展&#xff0c;锂电池作为核心组件&#xff0c;其生产质量受到了前所未有的关注。在锂电极片的生产过程中&#xff0c;机器视觉系统以其高精度、高效率的特点&#xff0c;成为了保障产品质量的关键工具。本文将探讨机器视觉系统在锂电极片生产中可以检测…

竞争优势:大型语言模型 (LLM) 如何重新定义业务策略

人工智能在内容创作中的突破 在当今快节奏的商业环境中&#xff0c;像 GPT-4 这样的大型语言模型 (LLM) 不再只是一种技术新颖性&#xff1b; 它们已成为重新定义跨行业业务战略的基石。 从增强客户服务到推动创新&#xff0c;法学硕士提供了企业不容忽视的竞争优势。 1. 加强…

工业相机采图方式、图像格式(BYTE、HObject和Mat)转换

1、概述 机器视觉项目中&#xff0c;如何采集到合适的图像是项目的第一步&#xff0c;也是最重要的一步&#xff0c;直接关系到后面图像处理算法及最终执行的结果。所以采用不同的工业相机成像以及如何转换成图像处理库所需要的格式成为项目开发中首先要考虑的问题。 2、工业…

【Micropython ESP32】RTC时钟

文章目录 前言一、RTC时钟的介绍1.1 RTC时钟的作用1.2 Micropython中时钟于硬件时钟的区别 二、machine.RTC 类2.1 machine.RTC 类的构造方法2.2 初始化 RTC 设备起始时间2.3 关闭 RTC 设备2.4 获取当前时间 三、示例代码总结 前言 在嵌入式设备开发中&#xff0c;实时时钟&am…

001_【基础篇】SpringBoot入门案例创建与实现

要求&#xff1a;使用 Springboot 开发一个 web 程序&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串 hello springboot 使用 springboot 只需要引入一个起步依赖 <dependency><groupId>org.springframework.boot</groupId><artifac…

Python 自然语言处理库之stanza使用详解

概要 在自然语言处理(NLP)领域,Python Stanza 库是一个备受推崇的工具,它提供了强大的功能和易用的接口,帮助开发者处理文本数据、进行语言分析和构建NLP应用。本文将深入探讨 Stanza 库的特性、用法,并通过丰富的示例代码展示其在实际项目中的应用。 Stanza 简介 Stan…

docker小白第十四天之Portainer与CIG

Portainer简介 Portainer是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 Portainer命令安装 # 一个容器可以同时起多个-p端口&#xff0c;restartalways表示随时在线&#xff0c;重启机器后也…

Tomcat 服务器部署和 IDEA 配置 Tomcat

(一) Tomcat 简介 Tomcat是Apache软件基金会一个核心项目&#xff0c;是一个开源免费的轻量级Web服务器&#xff0c;支持Servlet/JSP少量JavaEE规范。 概念中提到了JavaEE规范&#xff0c;那什么又是JavaEE规范呢? JavaEE: Java Enterprise Edition,Java企业版。指Java企业级…

CentOS 7.9 常用环境配置

文章目录 环境准备安装docker安装Java安装maven安装git安装MYSQL安装Redis安装RabbitMq安装minio 环境准备 操作系统版本为centos 7.9&#xff0c;内核版本需要在3.10以上 sudo uname -rsudo cat /etc/redhat-release1.确认环境好后&#xff0c;安装工具包并设置仓库 sudo yum…

解决由于历史原因解析tflite失败的问题

文章目录 0. 背景1. tflite 历史遗留问题2. schema3. flatbuffers 编译器3.1 安装 FlatBuffers 编译器3.2. 编译 FlatBuffers schema 文件3.3 使用生成的 Python 文件 4 问题未解决终极解决方案 写在最前面&#xff1a;解决方法是升级tensorflow版本&#xff0c;重新生成tflite…

算法---二分查找练习-2(寻找旋转排序数组中的最小值)

寻找旋转排序数组中的最小值 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 首先&#xff0c;检查数组的最后一个元素是否大于第一个元素。如果是&#xff0c;说明数组没有进行旋转&#xff0c;直接返回第一个元素作为最小值…

ISIS接口明文认证实验简述

默认情况下&#xff0c;ISIS接口认证通过在ISIS协议数据单元&#xff08;PDU&#xff09;中添加认证字段&#xff0c;例如&#xff1a;一个密钥或密码&#xff0c;用于验证发送方的身份。 ISIS接口认证防止未经授权的设备加入到网络中&#xff0c;并确保邻居之间的通信是可信的…

华为配置HTTPS服务器实验

配置HTTPS服务器示例 组网图形 图1 配置HTTPS服务器组网图 组网需求配置思路配置注意事项操作步骤配置文件 组网需求 如图1所示&#xff0c;用户通过Web方式访问网关设备AP。 为了防止传输的数据不被窃听和篡改&#xff0c;实现对设备的安全管理&#xff0c;网络管理员要…

【Unity】从0到1的横版2d制作笔记-DAY1

写在前面&#xff1a; 感谢旻子提供的Unity2d课程捏&#xff0c;红豆泥阿里嘎多 创建项目 测试Visual Studio的使用 右键选择【create】&#xff0c;右键创建C# Script&#xff0c;待文件创建完毕后双击查看能否正确跳转。 正确跳转的结果是能看见代码中注释标注有&#xff1a;…

策略模式实战

项目推荐最近开发完成的项目中使用到了策略模式&#xff0c;实现多种支付方式&#xff0c;避免了后期支付方式if-else代码的冗余&#xff0c;也有利于后期支付的一个扩展。同时这个项目非常适合于做毕设&#xff0c;想了解这个项目的同学可以联系我QQ&#xff1a;3808898981 前…

android studio 安装lombok插件

android studio 安装lombok插件 由于 AS 不是基于 IDEA release 版本进行开发的&#xff0c;因此lombok对idea的插件可能再as中无法查看到。因此再as中通过plugins管理无法安装lombok插件。这就导致再gradle引入lombok后&#xff0c;虽然编译可能会通过&#xff0c;但是代码在查…

二、Kubernetes(k8s)中部署项目wordpress(php博客项目,数据库mysql)

前期准备 1、关机顺序 2、开机顺序 (1)、k8s-ha1、k8s-ha2 (2)、master01、master02、master03 (3)、node01、node02 一、集群服务对外提供访问&#xff0c;需要通过Ingress代理发布域名 mast01上传 ingress-nginx.yaml node01、node02 上传 ingress-nginx.tar 、kube-webh…

10-项目部署_持续集成-黑马头条

项目部署_持续集成 1 今日内容介绍 1.1 什么是持续集成 持续集成&#xff08; Continuous integration &#xff0c; 简称 CI &#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干 持续集成的组成要素 一个自动构建过程&#xff0c; 从…

uniapp 云开发省钱之调整函数执行内存大小

我这个5块钱一个月的服务空间配置&#xff1a; 现在还只有少量的用户和自己测试之用&#xff0c;目前消耗的情况&#xff1a; 云函数的使用量还是挺高的&#xff0c;目前还是正好能覆盖一个月的使用量&#xff0c;等用户量上来肯定是不行的&#xff0c;所以得想想办法压榨一下云…