解题思路:
题目:
雇佣兵的体力最大值为M,初始体力值为0、战斗力为N、拥有X个能量元素。
当雇佣兵的体力值恰好为M时,才可以参加一个为期M天的战斗期,战斗期结束体力值将为0。在同一个战斗期内,雇佣兵每连续战斗n天,战斗力就会上升1点,n为当前战斗期开始时的战斗力。
一个战斗期结束后,雇佣兵需要用若干个能量元素使其体力恢复到最大值M,从而参加下一个战斗期。每个能量元素恢复的体力值不超过当前的战斗力。每个能量元素只能使用一次。
请问:雇佣兵的战斗力最大可以到达多少。
通过读题可得,输入量有三个,分别为M,N,X,刚开始的时候体力值为0,需要消耗能量元素使体力值达到M,然后参加N天的战斗,增加M/N的战斗力,然后维持类似的循环路径,直到能量元素消耗完之后不能再恢复体力值,便会达到最大战斗力。首先每次战斗之前要恢复体力值,每个能量元素能恢复的最大体力值为N,也就是战斗力大小,所以如果M / N为整数的话,每次消耗的能量元素便为M / N个;如果M / N不为整数的话,每次消耗的个数便为M / N + 1个。其次,每次战斗之后,战斗力都会提高,连续战斗n天战斗力提高一点,所以每次提高的战斗力便为M / N,所以每次循环之后,N = N + M / N;当X < 0的时候跳出循环,输出N即可。
注意事项:
题目较长,需要有耐心认真理解题目各个量之间的联系,找出循环条件
参考代码:
#include<stdio.h>
int main()
{
int M = 0;
int N = 0;
int X = 0;
int ret = 0;
scanf("%d %d %d", &M, &N, &X);//输入M,N,X的值
while (X)
{
//判断每次消耗的能量元素个数
if (M % N != 0)
{
ret = M / N +1;
}
else
{
ret = M / N;
}
X = X - ret;
//当X < 0的时候跳出循环
if (X < 0)
{
break;
}
//战斗力提高
N = N + M / N;
}
printf("%d\n", N);
return 0;
}
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:807 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:981 |
钟神赛车 (C语言代码)浏览:911 |
C语言训练-排序问题<1> (C++代码)浏览:631 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:672 |
用筛法求之N内的素数。 (C语言代码)浏览:1385 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:732 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:689 |
用筛法求之N内的素数。 (C++代码)浏览:754 |
数字游戏 (C++代码)浏览:1240 |