【Go语言入门100题】027 出租 (20 分) Go语言 | Golang

简介: 【Go语言入门100题】027 出租 (20 分) Go语言 | Golang

L1-027 出租 (20 分) Go语言|Golang

image.png

一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对应 arr[0]=8,index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100。


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


输入格式:

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


输出格式:

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


输入样例1:

18013820100

结尾无空行


输出样例1:

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


结尾无空行


思路:

读懂题目很重要!


输出的第一个列表其实就是这个电话号码的数字,只不过是去除了重复的数字再排一下序而已。

那第二个列表其实就是这个电话号码中的数字在第一个列表的下标位置而已!!


比如说:

index列表的第一个是3,就表示电话号码的第一个数字是arr列表的下标为3的数字,就是1。

index列表的第二个是0,就表示电话号码的第二个数字是arr列表的下标为0的数字,就是8。


那我们要做的就是反过来的操作。用这个电话号码去推这两个列表


先把第一个列表搞定,第一个列表就是提取出这个电话号码里面的数字然后去重再进行排序麻

第二个列表就是在第一个列表的基础上去遍历这个电话号码,去查询这个电话号码的数字在第一个列表里面的什么位置,记录下标就行了~

代码如下:

package main
import (
  "fmt"
  "sort"
  "strconv"
)
func main() {
  var str string
  var opList []int
  _,_=fmt.Scan(&str)
  phoneMap := make(map[rune]int)
  for _,i := range str{  //用map去存这个电话的数字
    phoneMap[i-'0'] = 1
  }
  for i:=0;i<=9;i++ {
    if phoneMap[rune(i)] == 1 {
      opList = append(opList, i) //拿到去重后的电话数字列表
    }
  }
  sort.Ints(opList)  // sort正序排
  var opListReserve []int
  for i:=len(opList)-1 ; i>=0 ; i-- {
    opListReserve = append(opListReserve, opList[i]) // 要倒序排
  }
  s:=""
  op := ""
  for _,i:= range opListReserve{
    op+=strconv.Itoa(i)+","
  }
  for _,i := range str{     //遍历一遍电话号码
    for index,j := range opListReserve{   // 再遍历一遍去重的电话号码
      if i-'0' == rune(j) {           // 如果是等于的话,就记录去重列表中的电话号码的下标
        s+=strconv.Itoa(index)+","
      }
    }
  }
  fmt.Printf("int[] arr = new int[]{%s};\n",op[:len(op)-1])   // 把最后一个逗号省去了
  fmt.Printf("int[] index = new int[]{%s};",s[:len(s)-1])
}
相关文章
|
4天前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
52 20
|
2天前
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
10天前
|
Go C语言
Go语言入门:分支结构
本文介绍了Go语言中的条件语句,包括`if...else`、`if...else if`和`switch`结构,并通过多个练习详细解释了它们的用法。`if...else`用于简单的条件判断;`if...else if`处理多条件分支;`switch`则适用于基于不同值的选择逻辑。特别地,文章还介绍了`fallthrough`关键字,用于优化重复代码。通过实例如判断年龄、奇偶数、公交乘车及成绩等级等,帮助读者更好地理解和应用这些结构。
34 14
|
25天前
|
存储 监控 算法
内网监控系统之 Go 语言布隆过滤器算法深度剖析
在数字化时代,内网监控系统对企业和组织的信息安全至关重要。布隆过滤器(Bloom Filter)作为一种高效的数据结构,能够快速判断元素是否存在于集合中,适用于内网监控中的恶意IP和违规域名筛选。本文介绍其原理、优势及Go语言实现,提升系统性能与响应速度,保障信息安全。
28 5
|
1月前
|
存储 安全 Go
Go语言中的map数据结构是如何实现的?
Go 语言中的 `map` 是基于哈希表实现的键值对数据结构,支持快速查找、插入和删除操作。其原理涉及哈希函数、桶(Bucket)、动态扩容和哈希冲突处理等关键机制,平均时间复杂度为 O(1)。为了确保线程安全,Go 提供了 `sync.Map` 类型,通过分段锁实现并发访问的安全性。示例代码展示了如何使用自定义结构体和切片模拟 `map` 功能,以及如何使用 `sync.Map` 进行线程安全的操作。
|
10天前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
19 0
|
存储 JSON API
Go语言:RESTful API 服务,急速入门!
REST即表述性状态传递(英文:Representational State Transfer,简称REST),它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性
525 0
Go语言:RESTful API 服务,急速入门!
|
安全 编译器 Go
Go语言,Protobuf 入门详解!
Protobuf 是 Protocol Buffers 的简称,是一种与语言、平台无关,可扩展的序列化结构化数据的数据描述语言,Protobuf作为接口规范的描述语言,可以作为设计安全的跨语言PRC接口的基础工具。
371 0
Go语言,Protobuf 入门详解!
|
机器学习/深度学习 前端开发 Java
go语言可以做什么?入门Go语言
go语言可以做什么?入门Go语言
|
存储 IDE Java
go语言简单入门
go语言简单入门
192 0