大二c语言练习如图所示,

给定一个字符串列表,每个字符串可以是以下4种类型之一,•整数(一轮的分数):直接表示你在这一轮得到的分数。
•“十”(一轮的分数)::表示你在这轮得到的分数是最后两轮有效分数的总和。
•“D”(一轮的分数):表示你在这一轮得到的分数是上一轮有效分数的翻倍数据。
•“c”(个操作,不是一轮的分数):表示上一轮有效的分数是无效的,应该
被删除。

img

输入是 52CD+这五个字符这样子吗?还是你例子中还有一堆双引号和括号啥的?
搞个数组,记录每轮的分数,并记录有效轮数。如果为C,则轮数减去1。最后把所有有效轮数的分数相加就行了

#include<iostream>
using namespace std;

int main()
{
    char a[1001] = {0};
    int s[1000] = {0},n=0,i=0,sum=0;
    gets_s(a);
    while(a[i] != '\0')
    {
        switch(a[i])
        {
        case 'C':
            {
                if(n>0)
                    n--;
            }
            break;
        case 'D':
            {
                if(n>0)
                {
                    s[n] = s[n-1] * 2;
                    n++;
                }
            }
            break;
        case '+':
            {
                if(n>1)
                {
                    s[n] = s[n-1]+s[n-2];
                    n++;
                }
                else if(n==1)
                {
                    s[1] = s[0];
                    n=2;
                }
            }
            break;
        default:
            {
                s[n] = a[i]-'0';
                n++;
            }
            break;
        }
        i++;
    }
    for(i=0;i<n;i++)
        sum += s[i];
    cout<<sum<<endl;
    return 0;
}


class Solution {
public:
    int calPoints(vector<string>& ops) {
        stack<int> numStack;
        int opsSize = ops.size();
        for (int i = 0; i < opsSize; ++i)
        {
            string s = ops[i];
            if (s == "C")
                numStack.pop();
            else if (s == "D")
                numStack.push(2 * numStack.top());
            else if (s == "+")
            {
                int pre1 = numStack.top();
                numStack.pop();
                int pre2 = numStack.top();
                numStack.push(pre1);
                numStack.push(pre1 + pre2);
            }
            else
                numStack.push(atoi(s.c_str())); 
        }

        int ret = 0;
        while (!numStack.empty())
        {
            ret += numStack.top();
            numStack.pop();
        }
        return ret;    
    }
};

用一个栈实现