C语言问题,有参考雇佣兵,从pta上找的

杖刀偶磨弓的体力最大值为M,初始体力值为0、战斗力为N、拥有X个能量元素;当她的体力值恰好为M时,才可以参加一个为期M天的战斗期,战斗期结束体力值将为0。在同一个战斗期内,她每连续战斗n天,战斗力就会上升1点,n为当前战斗期开始时的战斗力;一个战斗期结束后,她需要用若干个能量元素使其体力恢复到最大值M,从而参加下一个战斗期。每个能量元素恢复的体力值不超过当前的战斗力。每个能量元素只能使用一次。现求杖刀偶磨弓的战斗力最大可以到达多少。

img

#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;

}