杖刀偶磨弓的体力最大值为M,初始体力值为0、战斗力为N、拥有X个能量元素;当她的体力值恰好为M时,才可以参加一个为期M天的战斗期,战斗期结束体力值将为0。在同一个战斗期内,她每连续战斗n天,战斗力就会上升1点,n为当前战斗期开始时的战斗力;一个战斗期结束后,她需要用若干个能量元素使其体力恢复到最大值M,从而参加下一个战斗期。每个能量元素恢复的体力值不超过当前的战斗力。每个能量元素只能使用一次。现求杖刀偶磨弓的战斗力最大可以到达多少。
#include<stdio.h>
#include<stdlib.h>
int main()
{ /* 参数解释:
M:体力最大值为M(能进入战斗的条件)
N: 初始战斗力
X: 能量元素个数
n: “n为当前战斗期开始时的战斗力”
s: 当前体力值
*/
int M,N,X,n,s;
scanf("%d%d%d",&M,&N,&X);
s=0;// 体力初始为0
n=N;//当前战斗力n=N
while(X>0&&s<M){// 体力不够比赛,但还有能量元素提升
X-=1;
//每个能量元素恢复的体力值不超过当前的战斗力 ,故+ n
s= s + n <= M ? s+n: M; // 需要用若干个能量元素使其体力恢复到最大值M
if(s==M){// 有资格参加比赛
// 在同一个战斗期内,她每连续战斗n天,战斗力就会上升1点,n为当前战斗期开始时的战斗力;
n += s / n;
s = 0;//战斗期结束体力值将为0
}
}
printf("%d",n); // 战斗力是一直上升的,所以最大是最后值
system("pause");
}
#include
int main()
{
int m, n, x;
scanf("%d %d %d", &m, &n, &x);
while(x > 0) {
int t = m/n;//需要m/n个元素
if(m % n)
t++;
if(x < t)
break;
x -= t;//x-=m/n
t = m/n;
n += t;//n+=m/n
}
printf("%d\n", n);
return 0;
}