小南曾经非常喜欢游戏,痴迷到有时候为了打完一局游戏可以不睡觉不吃饭,导致成绩下降,身体也出现了一些不适。辅导员老师看到这种情况非常着急,他跟小南说“如果你真的喜欢游戏的话,为什么不自己利用所学的知识去设计和实现一些小游戏呢”。于是,小南痛定思痛,决定不再被别人设计的游戏所控制,他要设计自己喜欢的游戏,取名为升级打怪。
游戏场景中有n只从1编号到n的怪物monster,每只怪物拥有能量e,怪物按照编号从小到大顺序循环出现,即第n只怪物出现后下一只出现的为编号为1的怪物。玩家pla
玩家打怪物的规则为:
(1)从遇到的第一只怪物开始计数,玩家只能攻打遇到的第k只怪物,k的值由一个正整数m转换为二进制表示中最多的连续的1的个数确定。例如55转换为二进制为110111,最多的连续的1的个数为3,因此,k的值为3。
(2)如果攻打的这只怪物的能量e大于玩家的能量w,则玩家攻打失败,生命减少1次,玩家的能量不变;同时怪物的能量会减少,变为e-w。
(3)如果攻打的这只怪物的能量e不大于玩家的能量w,则玩家攻打成功,怪物出局(消失),能量被玩家吸收,玩家的能量变为w+e。
(4)攻打完当前的这只怪物后,无论成功与否,接下来都打从当前怪物下一只数起的第k只。如果只剩一只怪物,那么当前怪物的下一只还是当前怪物。
(5)当游戏场景中没有怪物了,则玩家胜利升级,显示剩余的生命次数;当玩家的生命次数变为0,则玩家失败,显示游戏场景中剩余的怪物数量。两种情况都表示游戏结束。
游戏设计好了,小南想考考你,你能用C语言编程实现这个游戏吗?
多个样例。 每个样例包含2行输入,第一行输入四个正整数:n(1≤n≤ 100)表示有n只怪物,编号为1~n;t(1≤t≤600)表示玩家的初始生命数;w (1≤w≤ 1000)表示玩家的初始能量;m(1≤m≤ 10000)用来确定攻打遇到的第k只怪物的k值。
第二行输入n个用空格分开的正整数x(1≤x≤ 1000),分别表示这n只怪物的能量。
每个样例根据游戏情况输出最后的结果:如果玩家攻打成功,则输出Yes,同时输出一个整数表示玩家剩余的生命数;如果攻打失败,则输出No,同时输出一个整数表示游戏场景中剩余的怪物数。Yes/No和整数之间用1个空格分开。每个样例输出一行。
6 5 2 3
1 2 3 4 5 6
6 5 2 3
10 20 30 40 50 60
6 5 2 3
2 3 4 5 6 7
1 5 5 55
5
1 5 5 55
11
1 5 5 55
26
Yes 5
No 6
Yes 2
Yes 5
Yes 3
No 1