美文网首页
火车票订票

火车票订票

作者: 小学生的救赎 | 来源:发表于2021-05-11 17:47 被阅读0次


package main

import (

"fmt"

"github.com/deckarep/golang-set"

)

var cities = []string{

"兰州",

"西安",

"郑州",

"武汉",

"广州",

"深圳",

}

var cityIndexMap =map[string]int{

"兰州" :0,

"西安":1,

"郑州":2,

"武汉":3,

"广州":4,

"深圳":5,

}

func main() {

var train *Train =new(Train)

initiate(train,50)

for i:=0;i<50;i++{

train.buyTicket("兰州","武汉")

}

fmt.Println(train.remainTickets("兰州","武汉") )//0

  canBuyTicket :=train.canBuyTicket("郑州","深圳")

fmt.Println(canBuyTicket)//false

}

func initiate(train *Train,size int){

train.size =size

  train.seats =make(map[string]map[int]bool)

for i:=0;i

startCity,endCity :=cities[i],cities[i+1]

sectionName :=startCity +"-" +endCity

      train.seats[sectionName] =make(map[int]bool)

for j:=0;j

train.seats[sectionName][j] =false

      }

}

}

type Train struct{

/*

  key:  区间名  value: map表示火车座位占用情况      key: 座位号,int

      value: 是否占用,ture或false

*/

  seats map[string]map[int]bool

  //座位数

  size int

}

//买票

func (train *Train)buyTicket(start,end string){

if !train.canBuyTicket(start,end){

return

  }

seats :=possibleSeats(start,end,train)

choose :=seats.ToSlice()[0]//买到的座位号

  value,ok :=choose.(int)

if !ok{

panic(fmt.Errorf("错误!"))

}

mark(train,start,end,value)

}

//是否有票

func (train *Train)canBuyTicket(start,end string)bool{

seats :=possibleSeats(start,end,train)

return len(seats.ToSlice()) >0

}

func (train *Train)remainTickets(start,end string)int{

seats :=possibleSeats(start,end,train)

return len(seats.ToSlice())

}

//退票(TODO: 这里没有做参数校验)

func (train *Train)abortTicket(start,end string,choose int){

unmark(train,start,end,choose)

}

func mark(train *Train,start,end string,choose int){

startIndex,endIndex :=cityIndexMap[start],cityIndexMap[end]

for i:=startIndex;i

startCity,endCity :=cities[i],cities[i+1]

sectionName :=startCity +"-" +endCity

      train.seats[sectionName][choose] =true

  }

}

func unmark(train *Train,start,end string,choose int){

startIndex,endIndex :=cityIndexMap[start],cityIndexMap[end]

for i:=startIndex;i

startCity,endCity :=cities[i],cities[i+1]

sectionName :=startCity +"-" +endCity

      train.seats[sectionName][choose] =false

  }

}

func possibleSeats(start,end string,train *Train)mapset.Set{

startIndex,endIndex :=cityIndexMap[start],cityIndexMap[end]

allUnTakenSeats := [][]int{}

for i:=startIndex;i

unTakenSeats := []int{}

startCity,endCity :=cities[i],cities[i+1]

sectionName :=startCity +"-" +endCity

      for j:=0;j

//座位没有被占用

        if !train.seats[sectionName][j]{

unTakenSeats =append(unTakenSeats,j)

}

}

allUnTakenSeats =append(allUnTakenSeats,unTakenSeats)

}

intersection :=intersect(allUnTakenSeats,train.size)

return intersection

}

//求集合的交集

func intersect(seats [][]int,size int)mapset.Set {

prev :=mapset.NewSet()

for i:=0;i

prev.Add(i)

}

for _,s :=range seats{

set :=mapset.NewSet()

for _,item :=range s {

set.Add(item)

}

prev =set.Intersect(prev)

}

return prev

}

相关文章

  • 火车票订票

    package main import ( "fmt" "github.com/deckarep/golang-s...

  • 公司又开始统一订票了

    每年的这个时候,公司安排了统一订票,包括火车票、高铁票,以方便那些需要订票的员工。 当每年的订票开始时,春节就不远...

  • 火车票抢票经验小记(2015年起)

    【购票方式】1、火车站售票窗口2、火车票代售点3、电话订票4、网络订票 【网络购票方式】1、12306官网购票2、...

  • 小程序智行火车票系统开发

    智行火车票小程序为一款12306火车票订票助手之一,提供火车票在线查询、预定、抢票等一站式火车票服务,解决你的购票...

  • 排队

    那是二零零九年的春运,当时还没有开通电话订票和网络订票。想要购买火车票,只能去车站或代售点。春运已经开始了,人们和...

  • 火车票抢票API 根据乘客的车次与座席要求快速订票出票

    火车票抢票API 根据乘客的车次与座席要求快速订票出票:https://www.juhe.cn/docs/api/...

  • Dundee 丹迪之二:Broughty城堡

    在这里先说一下我买火车票时的新发现。网上订票到了最后确认付款的时候,总票款底下有一个选项,是问你要不要和火车票一起...

  • 机票火车票网上订票等抵扣进项实务

    不属于不能抵扣情形才能抵扣 纳税人购进国内旅客运输服务不属于不能抵扣情形才能抵扣 1.购进国内旅客运输服务用于简易...

  • 我花了500块买了这次教训:一次狼狈的乘车经历

    引子: 今年的火车票格外地难预定。 寒假前在学校的时候,我就想着订票回家的事情。按照往年购票经验,杭州到唐河的车票...

  • 我检讨……

    今天手机弹出提示消息,今年火车票提前60天抢票,我马上想到问问老刘哪天回来,提前订票。他一向都是对于回家很积极...

网友评论

      本文标题:火车票订票

      本文链接:https://www.haomeiwen.com/subject/ttdndltx.html