雇傭兵的體力最大值為M,初始體力值為0、戰斗力為N、擁有X個能量元素。
當雇傭兵的體力值恰好為M時,才可以參加一個為期M天的戰斗期,戰斗期結束體力值將為0。在同一個戰斗期內,雇傭兵每連續戰斗n天,戰斗力就會上升1點,n為當前戰斗期開始時的戰斗力。
一個戰斗期結束後,雇傭兵需要用若干個能量元素使其體力恢復到最大值M,從而參加下一個戰斗期。每個能量元素恢復的體力值不超過當前的戰斗力。每個能量元素只能使用一次。
請問:雇傭兵的戰斗力最大可以到達多少。
5 2 10
6
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int n,m,x,engry;
int main()
{
scanf("%d%d%d",&m,&n,&x);
engry=n;//engry代表當前戰斗力
while(engry<=m&&x)
{
x-=ceil(double (m)/engry);
if(x<0) break;
engry+=floor(double (m)/engry);
}
cout<<engry;
}
思路:如果剛開始他的戰斗力大於m ,那麼戰斗m天湊不夠n天,所以他的戰斗力值不會增加