1. 题目
玩游戏时,当攻击力高于某一阶段时,会获得额外战斗力加成,当然攻击力越高,提升越少,不然就破坏游戏平衡了。
规则如下:
规则1
:攻击力低于或等于10万时,战斗力额外可提升10%;
规则2
:攻击力高于10万,低于20万时,低于10万的部分按规则1
,高于10万的部分,战斗力额外可提升7.5%;
规则3
:20万到40万之间时,低于20万的部分按规则2
,高于20万的部分,战斗力额外可提升5%;
规则4
:40万到60万之间时,低于40万的部分按规则3
,高于40万的部分,战斗力额外可提升3%;
规则5
:60万到100万之间时,低于60万的部分按规则4
,高于60万的部分,战斗力额外可提升1.5%;
规则6
:高于100万时,低于100万的部分按规则5
,高于100万的部分,战斗力额外可提升1%.
玩家可从键盘输入角色攻击力,求额外战斗力加成是多少?
2. 分析
这需要根据规则
进行分段计算。
3. 实例代码之if
计算
#include <stdio.h>
int main() {
double attackPower;
double extraBonus = 0;
// 从键盘输入角色攻击力
printf("请输入角色的攻击力:");
scanf("%lf", &attackPower);
if (attackPower <= 100000) {
extraBonus = attackPower * 0.1;
} else if (attackPower > 100000 && attackPower < 200000) {
extraBonus = 100000 * 0.1 + (attackPower - 100000) * 0.075;
} else if (attackPower >= 200000 && attackPower < 400000) {
extraBonus = 100000 * 0.1 + 100000 * 0.075 + (attackPower - 200000) * 0.05;
} else if (attackPower >= 400000 && attackPower < 600000) {
extraBonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (attackPower - 400000) * 0.03;
} else if (attackPower >= 600000 && attackPower < 1000000) {
extraBonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (attackPower - 600000) * 0.015;
} else if (attackPower >= 1000000) {
extraBonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (attackPower - 1000000) * 0.01;
}
printf("额外战斗力加成是:%lf\n", extraBonus);
return 0;
}
以上代码就是根据业务,硬编程,便于理解。
以下是使用switch
实现
4. 实例代码之switch
计算
#include <stdio.h>
int main() {
double attackPower;
double extraBonus = 0;
// 从键盘输入角色攻击力
printf("请输入角色的攻击力:");
scanf("%lf", &attackPower);
// 根据攻击力范围确定初始区间索引
int intervalIndex;
if (attackPower <= 100000) {
intervalIndex = 1;
} else if (attackPower <= 200000) {
intervalIndex = 2;
} else if (attackPower <= 400000) {
intervalIndex = 3;
} else if (attackPower <= 600000) {
intervalIndex = 4;
} else if (attackPower <= 1000000) {
intervalIndex = 5;
} else {
intervalIndex = 6;
}
switch (intervalIndex) {
case 1:
extraBonus = attackPower * 0.1;
break;
case 2:
extraBonus = 100000 * 0.1 + (attackPower - 100000) * 0.075;
break;
case 3:
extraBonus = 100000 * 0.1 + 100000 * 0.075 + (attackPower - 200000) * 0.05;
break;
case 4:
extraBonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (attackPower - 400000) * 0.03;
break;
case 5:
extraBonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (attackPower - 600000) * 0.015;
break;
case 6:
extraBonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (attackPower - 1000000) * 0.01;
break;
default:
printf("输入有误,请重新输入有效攻击力值。\n");
break;
}
printf("额外战斗力加成是:%lf\n", extraBonus);
return 0;
}
这个和if
计算类似。
5. 实例代码之switch
穿透现象计算
#include <stdio.h>
int main() {
double attackPower;
double extraBonus = 0.0;
int nBaseNo = 100000;
// 从键盘输入角色攻击力
printf("请输入角色的攻击力:");
scanf("%lf", &attackPower);
int nFlag;
nFlag = (int)(attackPower / nBaseNo);
nFlag = nFlag > 10 ? 10 : nFlag;
switch (nFlag) {
case 10:
extraBonus += (attackPower - 10 * nBaseNo) * 0.01;
attackPower = 10 * nBaseNo;
case 9:
case 8:
case 7:
case 6:
extraBonus += (attackPower - 6 * nBaseNo) * 0.015;
attackPower = 6 * nBaseNo;
case 5:
case 4:
extraBonus += (attackPower - 4 * nBaseNo) * 0.03;
attackPower = 4 * nBaseNo;
case 3:
case 2:
extraBonus += (attackPower - 2 * nBaseNo) * 0.05;
attackPower = 2 * nBaseNo;
case 1:
extraBonus += (attackPower - nBaseNo) * 0.075;
attackPower = nBaseNo;
case 0:
extraBonus += attackPower * 0.1;
}
printf("额外战斗力加成是:%lf\n", extraBonus);
return 0;
}
除此之外,还可以使用 数组、递归、链表等方式实现。主要是分析方式,实现就多了。