洛谷题解 P1867 【【Mc生存】经验值】

虽然题目说数据很坑,但我还是一次通过啦\(_)/
有图为证
Luogu
这题要不是因为我是学习MC忠粉,我才不做呢!


回归话题

这题有几个简(biān)单(tài)的重点:

  1. 等级初始值为0(emmm……)
  2. 定义要用浮点型(似乎不用提)
  3. 有一个数据是n=0的(但按照我的思路就不用特殊处理)
  4. 有可能会出现连升几级的情况,所以升级用while语句
  5. 一旦死了就立即输出加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
}

禁止抄袭,从我做起

posted @ 2020-03-17 10:09  榴恋666  阅读(159)  评论(0编辑  收藏  举报