解题思路:

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

用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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论