雇佣兵的体力最大值为 M,初始体力值为 0、战斗力为 N、拥有 X 个能量元素。
当雇佣兵的体力值恰好为 M 时,才可以参加一个为期 M 天的战斗期,战斗期结束体力值将为 0。在同一个战斗期内,雇佣兵每连续战斗 n 天,战斗力就会上升 1 点,n 为当前战斗期开始时的战斗力。
一个战斗期结束后,雇佣兵需要用若干个能量元素使其体力恢复到最大值 M,从而参加下一个战斗期。每个能量元素恢复的体力值不超过当前的战斗力。每个能量元素只能使用一次。
请问:雇佣兵的战斗力最大可以到达多少。
说明:只在战斗期结束后可以使用能量元素,可以使用多个能量元素。
输入格式
一行包括三个整数 M、N、X,相邻两个整数之间用单个空格隔开。M、N、X 均为不超过 10000 的正整数。
输出格式
输出一个整数,为雇佣兵的最大战斗力。
=代码=
#include<stdio.h>
#include<math.h>
int main(){
int m,n,x;
scanf("%d %d %d",&m,&n,&x);
while (x>0){
int c=n,t=m/n;\\这里区别体力和战斗期设置个c=n
if(m%n)
t++;
if(x<t)
break;
x -= t;
t = m/c;
n += t;
}
printf("%d\n",n);
return 0;
}
思路、
1、 根据题干确定雇佣兵战斗条件 体力和能力元素。体力初始值为 0,X>0时用若干能量恢复体力,然后战斗,因为使用的能量数目不知道所以需要使用while循环。
2、当体力到达到最大值m时,进行为期m天的战斗。
能量的消耗方式;计算一个m天的战斗期以初始战斗力(n)为轮次,计算结果可能时小数,所以的向上取整,因为不足一个战斗轮次也需要消耗能量元素。[x>0,x-=m/n]
战斗力的消耗方式;计算一个m天的战斗期以初始战斗力(n)为轮次,计算可能是小数,这个得向下取整,因为题干上说是战斗n天战斗力加 1。[m>n,n+=m/n]
3、战斗结束后,体力值为 0,用能量元素恢复。若剩下的能量元素小于需要使用的,则直接输出。
4、最后是一职循环,到元素使用完或者不足。