| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5317 人关注过本帖, 2 人收藏
标题:笔试时候遇到的一道神题!还是最近才出的,出题者肯定是星战迷,我给gui了. ...
只看楼主 加入收藏
mic_zhang
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2016-1-18
结帖率:0
收藏(2)
已结贴  问题点数:20 回复次数:35 
笔试时候遇到的一道神题!还是最近才出的,出题者肯定是星战迷,我给gui了...
偷偷拍照手打了一份,大家看看:

死星之战(一)
卢克在死星上面遭遇到一队敌人的进攻,每个敌人有两个属性:healthy(生命值) 和 attack(攻击力),卢克有把激光剑,激光剑每次除了对锁定的敌人造成固定伤害之外,同时还能对其他敌人产生5%的群伤溅射效果。卢克每次锁定攻击一个敌人(被锁定的敌人死亡之前,卢克不能更换攻击对象),但是其他敌人可以同时攻击卢克;所有人的攻击速度都相同;现在要写一个函数来找出一个最优的顺序来杀死这些敌人,而让卢克受到的伤害最小。
输入参数:
二维数组,表示敌人的healthy 和 attack,如: [[10, 2], [20, 1], [8, 6], [1, 1]]
卢克的攻击力,整数,如 3
输出:
在输入的二维数组中调整敌人的顺序,index 为 0 的最先被攻击,以此类推。
(注:编程语言不限)

搜索更多相关主题的帖子: 激光 攻击力 
2016-01-18 14:18
mic_zhang
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2016-1-18
收藏
得分:0 
应该是要先把攻击高的干掉吧?卢克每次只能打一个,而敌人是群殴,如果先打攻击少的,高攻击的每回合都会打卢克,回合越多就越亏。
2016-01-18 14:26
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:2 
这应该是一个动态优化的题,类似于背包:在规定的重量下装下价值总和最高的珠宝。

能编个毛线衣吗?
2016-01-18 14:43
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:2 
以下是引用mic_zhang在2016-1-18 14:26:03的发言:

应该是要先把攻击高的干掉吧?卢克每次只能打一个,而敌人是群殴,如果先打攻击少的,高攻击的每回合都会打卢克,回合越多就越亏。
假设卢克的攻击力为20
甲的生命1,攻击力20
乙的生命20,攻击力1

先锁定乙的话,只需要一刀就可以干掉两个;先锁定甲的话,需要两刀。
2016-01-18 15:22
mic_zhang
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2016-1-18
收藏
得分:0 
回复 4楼 rjsp
那应该跟卢克的攻击、敌人的血量也有关系
2016-01-19 10:27
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
数据量小的情况下,用全排列来算一下吧。

能编个毛线衣吗?
2016-01-19 14:17
zac225
Rank: 1
等 级:新手上路
帖 子:1
专家分:2
注 册:2016-1-19
收藏
得分:2 
发现无能无力
2016-01-19 19:31
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
想到一个权重计算算法:敌人权重=敌人攻击力/int(敌人生命力/我的攻击力+0.9999),首先对权重最大的进行消灭,消灭后再调整权重(要应对群伤的变化),重新对权重排序,重复操作,直至全部消灭,如此应该是最优打击效果。敌人权重就是每个生命单位的攻击力,比如,我方攻击力6,敌人1生命20,攻击力5,敌人2的生命3,攻击力3,敌人1权重=5/int(20/5+0.9999)=5/4=1.25,敌人2权重=3/(3/6+0.9999)=3,显然敌人2的攻击力虽然小,但权重大,优先消灭敌人2,同时要考虑生命力小于0.06的,即使权重大,也不优先考虑,因为渐射群伤即可消灭。
int(敌人生命力/我的攻击力+0.9999)的作用是得到一个整数消灭的次数,如敌人生命力是20,我的攻击力是3,20/3=6.66667,int(6.6667+0.9999)=7,需要7次消灭敌人。

[此贴子已经被作者于2016-1-20 08:59编辑过]


能编个毛线衣吗?
2016-01-19 23:08
菜鸟变大神
Rank: 2
等 级:论坛游民
帖 子:9
专家分:29
注 册:2014-6-23
收藏
得分:2 
版主不愧为版主   思维就是敏捷!!!佩服佩服
2016-01-20 22:30
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:2 
呵呵
看到一堆游戏术语时就晕了……
2016-01-21 09:09
快速回复:笔试时候遇到的一道神题!还是最近才出的,出题者肯定是星战迷,我给g ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040220 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved