网易首页 > 网易号 > 正文 申请入驻

2024-01-13:用go语言,现在有一个打怪类型的游戏,这个游戏是这

0
分享至

2024-01-13:用go语言,现在有一个打怪类型的游戏,这个游戏是这样的,你有n个技能,

每一个技能会有一个伤害,

同时若怪物小于等于一定的血量,则该技能可能造成双倍伤害,

每一个技能最多只能释放一次,已知怪物有m点血量。

现在想问你最少用几个技能能消灭掉他(血量小于等于0)。

技能的数量是n,怪物的血量是m,

i号技能的伤害是x[i],i号技能触发双倍伤害的血量最小值是y[i]。

1 <= n <= 10,

1 <= m、x[i]、y[i] <= 10^6。

答案2024-01-13:

来自左程云。

灵捷3.5

大体过程如下:

1.读取输入数据,包括技能数量 n、怪物血量 m,以及每个技能的伤害和触发双倍伤害的血量阈值。

2.定义一个递归函数 f(n, i, rest) 来求解最少使用多少个技能能够消灭怪物。其中,n 表示当前剩余的技能数量,i 表示当前考虑的技能索引,rest 表示剩余的怪物血量。

3.在递归函数 f 中,先判断如果剩余血量 rest 小于等于 0,则返回当前已使用技能的数量 i,表示已经成功消灭怪物。

4.继续判断如果技能索引 i 等于技能数量 n,则说明已经考虑完所有技能,但仍无法消灭怪物,返回一个较大的数值作为无解情况的标识。

5.初始化一个变量 ans 为一个较大的数值,用于记录最小使用技能数量。然后进入循环,从第 i 个技能开始尝试使用不同的技能。

6.在循环中,交换第 i 个技能和当前技能索引 j 对应的技能,以模拟尝试使用该技能。

7.判断如果剩余血量 rest 大于当前技能要求的血量触发双倍伤害的阈值 blood[i],则调用递归函数 f(n, i+1, rest-kill[i]),即不使用双倍伤害的情况下消灭怪物。

8.否则,调用递归函数 f(n, i+1, rest-kill[i]*2),即使用双倍伤害的情况下消灭怪物。

9.根据递归函数返回的结果,更新 ans 的最小值。

10.恢复交换前的技能顺序,保持数组的原始状态。

11.循环结束后,返回 ans 作为最终的结果。

总的时间复杂度为 O(n!),因为要求所有可能的技能使用组合。

额外空间复杂度为 O(n),主要是递归调用栈的空间。

go完整代码如下:

packagemain
import(
"fmt"
)
constMAXN=11
varkill[MAXN]int
varblood[MAXN]int
funcmain(){
inputs:=[]int{3,
3,100,
10,20,
45,89,
5,40,
3,100,
10,20,
45,90,
5,40,
3,100,
10,20,
45,84,
5,40}
ii:=0
t:=inputs[ii]
ii++
fori:=0;in:=inputs[ii]
ii++
m:=inputs[ii]
ii++
forj:=0;jkill[j]=inputs[ii]
ii++
blood[j]=inputs[ii]
ii++
}
ans:=f(n,0,m)
ifans==int(^uint(0)>>1){
fmt.Println(-1)
}else{
fmt.Println(ans)
}
}
}
funcf(n,i,restint)int{
ifrest<=0{
returni
}
ifi==n{
returnint(^uint(0)>>1)
}
ans:=int(^uint(0)>>1)
forj:=i;jswap(i,j)
ifrest>blood[i]{
ans=min(ans,f(n,i+1,rest-kill[i]))
}else{
ans=min(ans,f(n,i+1,rest-kill[i]*2))
}
swap(i,j)
}
returnans
}
funcswap(i,jint){
kill[i],kill[j]=kill[j],kill[i]
blood[i],blood[j]=blood[j],blood[i]
}
funcmin(a,bint)int{
ifareturna
}
returnb
}

rust完整代码如下:

constMAXN:usize=11;
staticmutKILL:[i32;MAXN]=[0;MAXN];
staticmutBLOOD:[i32;MAXN]=[0;MAXN];
fnmain(){
letinputs=[
3,3,100,10,20,45,89,5,40,3,100,10,20,45,90,5,40,3,100,10,20,45,84,5,
40,
];
letmutii=0;
lett=inputs[iiasusize];
ii+=1;
for_in0..t{
letn=inputs[iiasusize];
ii+=1;
letm=inputs[iiasusize];
ii+=1;
unsafe{
forjin0..n{
KILL[jasusize]=inputs[iiasusize];
ii+=1;
BLOOD[jasusize]=inputs[iiasusize];
ii+=1;
}
}
letans=f(n,0,m);
ifans==std::i32::MAX{
println!("-1");
}else{
println!("{}",ans);
}
}
}
fnf(n:i32,i:i32,rest:i32)->i32{
ifrest<=0{
returniasi32;
}
ifi==n{
returnstd::i32::MAX;
}
unsafe{
letmutans=std::i32::MAX;
forjini..n{
swap(i,j);
ifrest>BLOOD[iasusize]{
ans=min(ans,f(n,i+1,rest-KILL[iasusize]));
}else{
ans=min(ans,f(n,i+1,rest-KILL[iasusize]*2));
}
swap(i,j);
}
ans
}
}
fnswap(i:i32,j:i32){
unsafe{
lettemp_k=KILL[iasusize];
lettemp_b=BLOOD[iasusize];
KILL[iasusize]=KILL[jasusize];
BLOOD[iasusize]=BLOOD[jasusize];
KILL[jasusize]=temp_k;
BLOOD[jasusize]=temp_b;
}
}
fnmin(a:i32,b:i32)->i32{
ifaa
}else{
b
}
}

c++完整代码如下:

#include
#include
usingnamespacestd;
constintMAXN=11;
intkill[MAXN];
intblood[MAXN];
intf(intn,inti,intrest){
if(rest<=0){
returni;
}
if(i==n){
returnINT_MAX;
}
intans=INT_MAX;
for(intj=i;jswap(kill[i],kill[j]);
swap(blood[i],blood[j]);
if(rest>blood[i]){
ans=min(ans,f(n,i+1,rest-kill[i]));
}
else{
ans=min(ans,f(n,i+1,rest-kill[i]*2));
}
swap(kill[i],kill[j]);
swap(blood[i],blood[j]);
}
returnans;
}
intmain(){
intinputs[]={3,
3,100,
10,20,
45,89,
5,40,
3,100,
10,20,
45,90,
5,40,
3,100,
10,20,
45,84,
5,40};
intii=0;
intt=inputs[ii++];
for(inti=0;iintn=inputs[ii++];
intm=inputs[ii++];
for(intj=0;jkill[j]=inputs[ii++];
blood[j]=inputs[ii++];
}
intans=f(n,0,m);
if(ans==INT_MAX){
cout<<-1<}
else{
cout<}
}
return0;
}

c完整代码如下:

#include
#include
#defineMAXN11
intkill[MAXN];
intblood[MAXN];
intmin(inta,intb){
return(a}
voidswap(int*a,int*b){
inttemp=*a;
*a=*b;
*b=temp;
}
intf(intn,inti,intrest){
if(rest<=0){
returni;
}
if(i==n){
returnINT_MAX;
}
intans=INT_MAX;
for(intj=i;jswap(&kill[i],&kill[j]);
swap(&blood[i],&blood[j]);
if(rest>blood[i]){
ans=min(ans,f(n,i+1,rest-kill[i]));
}
else{
ans=min(ans,f(n,i+1,rest-kill[i]*2));
}
swap(&kill[i],&kill[j]);
swap(&blood[i],&blood[j]);
}
returnans;
}
intmain(){
intinputs[]={3,
3,100,
10,20,
45,89,
5,40,
3,100,
10,20,
45,90,
5,40,
3,100,
10,20,
45,84,
5,40};
intii=0;
intt=inputs[ii++];
for(inti=0;iintn=inputs[ii++];
intm=inputs[ii++];
for(intj=0;jkill[j]=inputs[ii++];
blood[j]=inputs[ii++];
}
intans=f(n,0,m);
if(ans==INT_MAX){
printf("%d\n",-1);
}
else{
printf("%d\n",ans);
}
}
return0;
}

声明:个人原创,仅供参考

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
莎拉安全过关!菲律宾参议院议长突然被换,就是13号弹劾预演

莎拉安全过关!菲律宾参议院议长突然被换,就是13号弹劾预演

兰妮搞笑分享
2026-05-12 13:42:22
男子公开致歉赛力斯:多次贬损问界 已删除视频并赔偿16万

男子公开致歉赛力斯:多次贬损问界 已删除视频并赔偿16万

快科技
2026-05-11 21:20:06
从玄学角度讲,你永远不要操心你孩子的命运,看完这段话让你释怀

从玄学角度讲,你永远不要操心你孩子的命运,看完这段话让你释怀

风起见你
2026-05-11 13:03:52
女子4S店找母婴室喂奶遭嘲笑,理想客服:门店已主动道歉,承诺将在215家门店增设母婴室

女子4S店找母婴室喂奶遭嘲笑,理想客服:门店已主动道歉,承诺将在215家门店增设母婴室

观威海
2026-05-12 10:10:07
2.69万,宇树把双臂机器人卷成了家电价

2.69万,宇树把双臂机器人卷成了家电价

码上闲叙
2026-04-30 11:56:23
婴儿疑被遗弃在婴儿车里现场留有1000元现金、奶粉和生日,妇联:夫妻吵架把孩子放外婆家楼下,可能现场群众有误会,已联系家长接走

婴儿疑被遗弃在婴儿车里现场留有1000元现金、奶粉和生日,妇联:夫妻吵架把孩子放外婆家楼下,可能现场群众有误会,已联系家长接走

观威海
2026-05-11 17:14:04
官方官宣落定!特朗普访华3天,但就在启程前,美方临时加了一手

官方官宣落定!特朗普访华3天,但就在启程前,美方临时加了一手

青烟小先生
2026-05-12 14:24:14
4月新势力上险量揭穿谁在销量造假

4月新势力上险量揭穿谁在销量造假

铁流1988
2026-05-12 06:19:37
英国首相称将对令人失望的选举结果负责

英国首相称将对令人失望的选举结果负责

财联社
2026-05-11 17:32:12
离婚1年后,女子再次思念前夫,发了句“在干嘛”,他立马回复:你要是再多说一句话,明天我就找你复婚!

离婚1年后,女子再次思念前夫,发了句“在干嘛”,他立马回复:你要是再多说一句话,明天我就找你复婚!

品读时刻
2026-05-08 09:09:58
马姆达尼执政不足百天时间,印证了平均主义民粹政治的彻底破产

马姆达尼执政不足百天时间,印证了平均主义民粹政治的彻底破产

壹家言
2026-05-11 09:06:45
“梵”字贴窗引骨灰房恐慌!网友:如果是真放的,没这么明目张胆

“梵”字贴窗引骨灰房恐慌!网友:如果是真放的,没这么明目张胆

火山詩话
2026-05-12 11:23:52
有没有人敢爆自己的瓜?网友:确定玩这么大吗?

有没有人敢爆自己的瓜?网友:确定玩这么大吗?

夜深爱杂谈
2026-02-18 20:55:58
曝国际足联愿作出“重大让步”,给我国的转播权最新报价是多少?

曝国际足联愿作出“重大让步”,给我国的转播权最新报价是多少?

凡知
2026-05-12 10:38:34
“大空头”:美股或将崩盘,科技股飙升重现2000年泡沫

“大空头”:美股或将崩盘,科技股飙升重现2000年泡沫

华尔街见闻官方
2026-05-12 06:33:43
74岁普京现身阅兵仪式,面容憔悴引发健康担忧,俄乌冲突消耗身心

74岁普京现身阅兵仪式,面容憔悴引发健康担忧,俄乌冲突消耗身心

译言
2026-05-11 07:33:16
医生坦言:只要体检里没有这2个箭头,脑梗风险就不用太焦虑

医生坦言:只要体检里没有这2个箭头,脑梗风险就不用太焦虑

荆医生科普
2026-04-16 15:23:37
喜讯!李金羽从辽宁铁人下课后官宣收到了一份大礼,让球迷意外

喜讯!李金羽从辽宁铁人下课后官宣收到了一份大礼,让球迷意外

张丽说足球
2026-05-12 14:06:12
恩爱剧本不演了?奚梦瑶提离婚,何猷君掀桌子私生子传闻真相大白

恩爱剧本不演了?奚梦瑶提离婚,何猷君掀桌子私生子传闻真相大白

秋姐居
2026-04-04 22:23:29
马刺天王山大战伤情报告出炉,福克斯出战成疑,文班亚马躲过禁赛

马刺天王山大战伤情报告出炉,福克斯出战成疑,文班亚马躲过禁赛

世界体育圈
2026-05-12 13:15:15
2026-05-12 15:27:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1221文章数 67关注度
往期回顾 全部

游戏要闻

KK对战平台怎么联机?涵盖魔兽_红警_CS1.6_街机等多专区一键畅玩指南

头条要闻

45岁独身男子病逝15万存款被指遭民政局转走 当地回应

头条要闻

45岁独身男子病逝15万存款被指遭民政局转走 当地回应

体育要闻

总是掉链子的“倒霉蛋”,闯进了欧战决赛

娱乐要闻

刘涛晒妈祖诞辰活动照 评论区变许愿池

财经要闻

黄仁勋真是被白宫彻底封杀了

科技要闻

纳德拉法庭爆料:拒当“AI时代的IBM”

汽车要闻

吉利银河“TT”申报图曝光 电动尾翼+激光雷达

态度原创

教育
时尚
家居
房产
艺术

教育要闻

过来人忠告:初中掉队的孩子90%都栽在一个习惯,现在改还来得及

推广|| 你们都想要的绝美白衬衫,链接来了!

家居要闻

极简主义下的居住场域与空间

房产要闻

50亿资本布局!宁德时代,突然重仓三亚!

艺术要闻

这位画家的油画美人让人惊叹不已!

无障碍浏览 进入关怀版