#Pascal
###对于这道题目,我最想说的是:请管理员把题目中的初始等级为1改成0(大家可以计算一下样例看看)。
因为我一开始在做这道题的时候就充满疑惑,与样例不匹配。后来才发现了。
好吧,言归正传。对于这一道题目我想出了一种比较简单判断又新奇的方法。
具体算法(在程序中就不一一讲了):
我首先在a数组中存储了达到某一个等级所需要的经验值(这样不用多开循环计算)
为什么算到30级呢?因为2的30次方已经很接近maxlongint了,我相信数据中的经验值应该没这么大
接下便读入一个数,如果生命值大于0,那么就把经验值累加起来。
只要在最后判断一下该经验值在哪一个等级的范围里输出就行了。
对了,记得要考虑等级与经验都为0的情况。于是漂亮的一次过了。
下面附上pascal AC 代码 供同学们参考
```cpp
var n,i,t,y:longint;
p:boolean;
x,s:real;
a:array[1..31]of longint;
begin
readln(n);
s:=10;
a[1]:=1;
for i:=2 to 30 do
a[i]:=a[i-1]*2;
for i:=2 to 30 do
a[i]:=a[i-1]+a[i];
for i:=1 to n do
begin
read(x,y);
if p=false then begin
s:=s-x;
if s>10 then s:=10;
if s<=0 then p:=true;
if p=false then
t:=t+y;
end;
end;
for i:=1 to 30 do
if (t>=a[i]) and (t<a[i+1]) then
begin
write(i,' ',t-a[i]);
break;
end;
if t=0 then write(0,' ',0);
end.
```
如有错误,还请指出