package mainimport ("fmt""math/rand""sort"
)// 赛马
//@题目:有25匹马,5个赛道,选出跑的最快的前几匹。
//@思路:先将25匹马,分成5组,组内排序,倒序。 如[5, 4, 3, 2, 1]
//      将5组马,放到5个赛道中,组内跑的最快的在队首。
//      每个赛道跑的最快的进行比赛,就可选出跑的最快的那匹马。
//      将跑的最快的马剔除跑道,那个队伍第二快的和其他几个队伍第一快的比赛。选出第二...
func main() {// 创建比赛horseRace := NewHorseRace(25, 5)fmt.Printf("%+v", horseRace)// 按赛道分组,并第一次比赛var playground Playgroundfor i := 0; i < len(horseRace.Horses); i += horseRace.Tracks {r := Race{Horses: horseRace.Horses[i : i+horseRace.Tracks],}r.Match()playground.Races = append(playground.Races, r)}fmt.Println(playground)// 第一次比赛for i := 0; i < 25; i++ {fmt.Println(i+1, ":", playground.GetNo1())}
}type HorseRace struct {Horses []int // 马Tracks int   // 赛道数
}// 赛道
type Race struct {Horses []int // 待比赛的马
}// 比赛
func (this *Race) Match() {sort.Sort(sort.Reverse(sort.IntSlice(this.Horses)))
}// 获得本赛道跑的最快的那匹马
func (this *Race) GetFastest() int {if len(this.Horses) == 0 {return -1}this.Match()fastest := this.Horses[0]this.Horses = this.Horses[1:]return fastest
}// 操场
type Playground struct {Races []Race // 赛道
}// 获得操场上的第一名,并从操场上移除
func (this *Playground) GetNo1() int {var newRace Race// 将每组跑的最快的放在赛道上比赛for _, r := range this.Races {newRace.Horses = append(newRace.Horses, r.Horses[0])}h := newRace.GetFastest()// 将最快的马h从操场上移除for i := 0; i < len(this.Races); i++ {r := &this.Races[i]if h == r.Horses[0] {r.Horses = r.Horses[1:]// 如果某个赛道没有马了,清除这个赛道if len(r.Horses) == 0 {this.Races = append(this.Races[:i], this.Races[i+1:]...)}break}}return h
}// 新建一场赛马比赛
// @num 马的数量
// @tracks 赛道数
func NewHorseRace(num, tracks int) HorseRace {var horses []intfor i := 0; i < num; i++ {horses = append(horses, rand.Intn(25))}horserace := HorseRace{Horses: horses,Tracks: tracks,}return horserace
}

赛马比赛:25匹马,5个赛道,选出跑的快的前几匹相关推荐

  1. 有36匹马6个跑道,用最少比赛次数算出跑最快的前3匹马

    36匹马分6个组,分别为A.B.C.D.E.F组. 第一轮,每个组各跑一次,取每组前三名,标识为A1.A2.A3,B1.B2.B3,以此类推. 第二轮,每个组的第一名(A1--F1)拉出来跑一次,假设 ...

  2. 25匹马,5条赛道,一匹马一个赛道,比赛只能得到5匹马之间的快慢程度,求1,2,3名

    题目:赛马,有25匹马,每次只能5匹马进行比赛,比赛只能得到5匹马之间的快慢程度,而不是速度,请问,最少要比1次,才能获得最快的前3匹马? 给所有马标号,分成5组: A组:A1,A2,A3,A4,A5 ...

  3. 腾讯面试:赛马问题【超详细图解】64匹马,8个赛道,找出前4名最少比赛多少场?

    目录 常规思路 正确答案解析 第一轮:8场 第二轮:1场 第三轮:1场或2场 总结 引子:在面试大厂时,怎么也没想到会考我一道脑筋急转弯. 问题:有64匹马和8条跑道,每次只允许最多8匹马同时比赛(假 ...

  4. 64匹马,8赛道,找出跑得最快的4匹马,至少比赛9场

    遇到这种问题, 首先先不要尝试思考具体的方式, 先用算法找上下限, 接下来不断通过验证和分析去缩短已经确定的上下限(因为你的上下限计算方式可能不对). 这里先给一个简单的题: 4个矿泉水瓶可以换一瓶矿 ...

  5. 经典面试题:64匹马,8个赛道,找出前4名最少比赛多少场?

    第一步:全部马分8组,各跑一次,然后淘汰掉每组的后四名(8次): 此时,只有列上有大小关系,行上是没有大小关系的. 最少10次选出前四,最多11次选出前四 在以上的两次比赛过后可以得出,A1 直接晋级 ...

  6. 【智力问题】25匹马赛跑,每次只能跑5匹马,最快能赛几次找出跑得最快的3匹马?赛跑不能计时,并假设每匹马的速度是恒定不变的。...

    答案是7次. 1. 首先将25匹马分成5组a.b.c.d.e进行比赛.比赛的次数就是5次.得到每组的第一名,分别编号a1,b1,c1,d1,e1. 2. 然后我们将每组的第一名进行比赛,得出结果.假设 ...

  7. 25匹马,5个跑道,最少比几次可以得出跑得最快的前三匹吗?

    算法思路: 首先将25匹马分成5个小组,分别为A, B, C, D, E,比赛次数5次: 每个小组都分别进行比赛,分别得到前两名,分别为A1,A2, B1, B2, C1, C2, D1, D2, E ...

  8. 25匹马,5个跑道,每次只能跑5匹,用最少的次数选出最快的前3匹

    跑马智力题 25匹马 5个跑道,每次只能跑5匹,至少需要多少次才能选出最快的前3匹? 分五组ABCDE,每组5匹: 先每组马pk,找出每组中的最快的马,标记为A1B1C1D1E1;----需比赛5场: ...

  9. 有36匹马,六个跑道,用最少的次数选出最快的前3匹马

    有36匹马,六个跑道,用最少的次数选出最快的前3匹马 问题描述 分析 结论 问题描述 现有36匹马,6个赛道,没有计时器.现在要在36匹马中选出前三名,请问最少需要多少次比赛? 分析 根据问题我们可以 ...

最新文章

  1. 一起谈.NET技术,VS2010测试功能之旅:编码的UI测试(3)-操作对象的识别原理...
  2. 如何向列表中添加数据值(管理员篇)
  3. Qt|OpenGL对obj文件的认识以及如何去解析(opengl+qt构造地球模型)
  4. c语言多线程_马云都称赞的C语言、C++学习路线!!!!
  5. 九章基础算法01:链表
  6. Codevs 1794 修剪花卉
  7. php yii2模块,Yii2 中关于模块(Modules)的使用及配置
  8. quick cocos2dx 组件
  9. matlab pi调节器,pi调节器的输入和输出_pi调节器的传递函数
  10. 线性代数的本质(Essense Of Linear Algebra)[1]
  11. WordPress文章/页面浏览量计数器插件Post Views Counter
  12. 养一只”无限猴子”帮你测试
  13. tkinter将图标写入py文件
  14. android app如何后台自启动,商家骑手端允许后台运行APP设置方法(安卓)
  15. Latex学习笔记(五)——Latex模板学习总结
  16. 浅谈偏光镜使用与选购[机器视觉系列]
  17. mm7 彩信发送方法
  18. 爬虫:爬取以太坊区块链浏览器数据
  19. 面试说了这几句话,offer铁定无望!
  20. gog无效的验证码_《我的世界》待售,命令行中的GOG等

热门文章

  1. 因果推断1--基本方法介绍(个人笔记)
  2. 攻防世界 super sqli write up
  3. networkx读取gml图文件
  4. antd Upload手动上传(react)
  5. Python 每天定时运行某程序代码
  6. 简述python语言的主要领域_简述Python语言经验总结
  7. 【DW推荐系统论文组队task1--NCF】
  8. 首个仿生机器人亮相 有人造器官与血液
  9. 广州推出全国首个交通运输视频智能化综合分析平台
  10. matlab画banana函数,MATLAB 必须知道的基本操作.m