B 傷害計算

2021-10-05 23:00:13 字數 1140 閱讀 1465

傳送門

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 262144k,其他語言524288k

64bit io format: %lld

勇士菜哭武獲得了一把新的**,**有特殊的傷害計算方式。**的傷害計算方式由若干個部分的和組成,用+號連線。每一部分可以是乙個整數a,或者是乙個公式ndx。其中a表示固定傷害a點;ndx表示擲n個x面骰子,傷害是所有骰子點數的和。總傷害是每一部分傷害的和。

比如2d6+1d70+3,表示擲兩個6面骰子和乙個70面骰子(不一定實際存在70面骰子,可以理解成1到70當中隨機選擇乙個整數),再加上固定傷害3點。

他正準備挑選一把好**,需要計算新**的傷害期望值,想讓你幫他計算一下。

輸入乙個字串,表示傷害計算公式。字串長度不超過5000,對於每乙個部分,1≤a, n, x≤1000。a,n,x都是整數。
輸出乙個數,表示傷害的期望值。如果不是整數,小數點後位數保留最少,即最終結果只有可能是整數或者小數點後是.5的形式,如果不是整數,那麼保留一位小數。

示例1

1d6+1d70+1d10+6
50.5
思路:

根據+號分割開,然後分類解決。包含 d 的:n*(x+1)/2;不包含 d 的直接 atoi 一下就可以。

注意避免浮點數運算,可以全部都乘 2 然後輸出的時候分奇偶判斷是否輸出.5。

注意輸出浮點數的時候,如果有 1000000 之類的數可能會輸出成 1e+06 的形式。全部使用

整數計算可以避免此類問題

#include #include #include #include #include using namespace std;

int main()

ans+=num*2;

} else

mul=1;

for(int j=str.length()-1;j>=idxx+1;j--)

ans+=(n*(x+1));

} i+=str.length();

} cout《說實話,題解中處理浮點數的方式是極好的。針對除2的運算,只有整除和餘1的情況,那麼最後的答案要麼是整數,要麼餘0.5.只要在之前都乘2,判斷奇偶,就能知道。

而且題目本身好像也說了如果是整數就不用輸出小數形式了。

攻擊傷害的計算

攻擊造成的傷害型別有哪些以及遊戲後端怎樣計算這些傷害呢?傷害型別主要包括 普通攻擊 技能攻擊 高階屬性帶來的傷害 暴擊,增傷 百分比傷害 反傷等。傷害計算主要包括 攻防血公式計算傷害 直接傷害 固定傷害或百分比傷害 攻防血公式計算傷害 直接傷害 計算傷害的型別主要又可以分為兩種 一 走攻防血傷害計算...

牛客 傷害計算 排列計算

給你乙個由 號分割的字串,每一段可能是純整數,那麼直接相加即可,也可能是由乙個整數a加 d 加乙個整數b組成,表示投擲a次有b面的篩子,結果加上它的期望 直接記錄每個 號位置,然後將字串分割出來,按題意模擬即可,期望公式就是 b 1 b 2a b includeusing namespace std...

原神甘雨傷害計算程式 python

calc damage可以計算普通人物的傷害期望,calc damage ganyu主要針對重擊傷害和技能傷害,這裡沒有考慮凍結時額外加的20暴擊率。別問,問就是沒水。import numpy as np def calc damage base attack,ext attack,critical...