科大訊飛杯”第十七屆同濟大學校賽 B 傷害計算 (純模擬)

題目鏈接

題目描述

勇士菜哭武獲得了一把新的武器,武器有特殊的傷害計算方式。武器的傷害計算方式由若干個部分的和組成,用+號連接。每一部分可以是一個整數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

不知道說啥,就模擬着做,注意輸出的時候要是整數就直接輸出,小數的話就先變成整數,後面加個. 5。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+100;
const int inf=0x3f3f3f3f;
double sum=0.0;
double res(int x)
{
    double s=0;
    for(double i=1;i<=x;i++)
    s+=i;
    return s;
}
int main()
{
    cout.setf(ios::fixed);
    cout<<setprecision(1);
    string str;
    cin>>str;
    while(1)
    {
        int dex=str.find('+');
        if(dex==-1)
        {
            double n=0,num=0;int pos;
            if(str.find('d')==-1)
           {
            for(int i=0;i<str.size();i++)
            n=n*10+str[i]-'0';
            sum+=n;
            }

        else
        {
         for(int i=0;i<str.size();i++)
          if(str[i]=='d')
         {
            pos=i;
          }
        for(int i=0;i<pos;i++)
        n=n*10+str[i]-'0';

        for(int i=pos+1;i<str.size();i++)
         num=num*10+str[i]-'0';
        sum+=n*(res(num)/num);
         
        }

            break;
        }

        string st=str.substr(0,dex);
        int pos;double n=0,num=0;
      
        if(str.find('d')==-1)
        {
            for(int i=0;i<st.size();i++)
            n=n*10+st[i]-'0';
            sum+=n;
        }
        else
        {
         for(int i=0;i<st.size();i++)
        if(st[i]=='d')
        {
            pos=i;
        }
        for(int i=0;i<pos;i++)
        n=n*10+st[i]-'0';

        for(int i=pos+1;i<st.size();i++)
         num=num*10+st[i]-'0';
        sum+=n*(res(num)/num);
         
        }
        

        str=str.substr(dex+1);
       
    }
    if((int)(sum)==sum)cout<<(int)sum<<endl;
    else cout<<(int)sum<<".5"<<endl;
    system("pause");
    return 0;
}

越打感覺自己越菜,菜的頭暈

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章