洛谷题解 P1867 【【Mc生存】经验值】
虽然题目说数据很坑,但我还是一次通过啦\(_)/
有图为证
这题要不是因为我是学习MC忠粉,我才不做呢!
回归话题
这题有几个简(biān)单(tài)的重点:
- 等级初始值为0(emmm……)
- 定义要用浮点型(似乎不用提)
- 有一个数据是n=0的(但按照我的思路就不用特殊处理)
- 有可能会出现连升几级的情况,所以升级用while语句
- 一旦死了就立即输出加return 0、
好,上代码
#include<iostream> //C++标准库
#include<cmath> //pow(幂函数)所在库
using namespace std; //命名空间
int main() //主函数开始
{
double n,life=10,plus,reduce,grade=0,experience=0; //定义n,生命,加经验,等级,经验(其实只有生命,加经验,经验要定义成double)
cin>>n; //输入n
for(int i=1;i<=n;i++) //循环
{ //边输入边计算
cin>>reduce>>plus; //输入加经验,减生命
life-=reduce; //减生命
if(life<=0) //如果没命了
{
cout<<grade<<" "<<experience; //直接输出当前经验,等级
return 0; //结束程序
}
if(life > 10) //如果生命太大 (>10)
life=10; //生命=10
experience+=plus; //经验加上
while(experience >= pow(2,grade)) //如果经验大于升级需要的
{
experience-=pow(2,grade); //减去经验
grade++; //等级+1
}
}
cout<<grade<<" "<<experience; //输出
return 0; //End
}