twinpan


私信TA

用户名:twinpan

访问量:1309

签 名:

等  级
排  名 59118
经  验 196
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 清华大学
专  业

  自我简介:

解题思路:

对于输入串做分析,提取每个增量,然后对增量前面的系数按带符号整数做排序,从小到大,得出计算增量顺序。

用c++string的find方法获取每个"a++"和“++a”的位置为基准,查看前面的系数和符号,构成

vec<系数>,并进行从小到大排序。


注意事项:

递交答案显示答案错误。没有找到原因,对于输入字符串和系数没有做边界检查或过滤?


参考代码:

#include <iostream>

#include <string>

#include <vector>

#include <algorithm> //sort

#include <stdlib.h> //atoi


using namespace std;


struct s_basic{

    short n, m;//m=0=>a++, m=>++a

};


//for sort

bool compare(const struct s_basic &t1, const struct s_basic &t2)

{

    return t1.n < t2.n;

}


void stringscan( vector<struct s_basic> &v, string s, const char* p, short m)

{

    struct s_basic b;

    int l = 0, i;

    b.m = m;


//parse string to get basic items;

    while( (l = s.find(p, l))!= string::npos)

    {

        if( l == 0)//head is a++ or ++a

        {

            b.n = 1;

            v.push_back(b);

        }else

        {

            switch( s[l-1])

            {

            case '+':

                b.n=1;

                break;

            case '-':

                b.n=-1;

                break;

            case '*':

                i = l - 1;

                while( i > 0 && s[i-1] !='+' && s[i-1] != '-')

                    --i;

                b.n=atoi(s.substr(i, l-i-1).c_str());

                if(s[i-1]=='-')

                    b.n=-b.n;

// cout<<" l=" << l << "  i=" << i << "  b.n="<<b.n<< endl;

                break;

            }//end of switch

            v.push_back(b);

        }//end if

        l += 3;

    }//end of while

}


int main()

{


    int a, sum = 0, i;

    string s, subs;

    vector<struct s_basic> vec;


    cin >> a;

    cin >> s;

    stringscan(vec, s, "a++", 0);

    stringscan(vec, s, "++a", 1);

    sort(vec.begin(), vec.end(), compare);

    for(i = 0; i < vec.size(); ++i)

    {

        sum += vec[i].n * (a+++vec[i].m);

    }

    cout << sum << endl;

    vec.clear();

    return 0;

}


 

0.0分

3 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区