【C++】牛客经典面试题

1.扑克牌大小

这个题题意没什么难,但是要注意string各种函数的使用,不要写冗余

 

#include<iostream>
#include <string> 
#include <vector>
#include <algorithm>
using namespace std;

string FindMax(const string& s)
{
string s1;
string s2;
if(s.find("joker JOKER")!=string::npos)
 return "joker JOKER";
 int dath=s.find('-');
s1=s.substr(0,dath);
s2=s.substr(dath+1);
int num1=count(s1.begin(),s1.end(),' ')+1;
int num2=count(s2.begin(),s2.end(),' ')+1;
string s1_first=s1.substr(0,s1.find(' '));
string s2_first=s2.substr(0,s2.find(' '));
if(num1 == num2)
{
    string tmp="345678910JQKA2jokerJOKER";
    if(tmp.find(s1_first)>tmp.find(s2_first))
    return s1;
    else return s2;
}
if(num1==4) return s1;
else if(num2==4) return s2;

return "ERROR";
}
int main()
{
string s,ans;
while(getline(cin,s))
{
    ans=FindMax(s);
    cout<<ans<<endl;
}
return 0;

}

2.杨辉三角的变形

#include <iostream>
using namespace std;

int main() {
int n;
cin>>n;
if(n<=2)
    cout<<-1<<endl;
if((n-2)%4==1 || (n-2)%4==3) 

    cout<<2<<endl;

else if((n-2)%4==2)

    cout<<3<<endl;
  
else if((n-2)%4==0)

    cout<<4<<endl;
 return 0;

 }

3.表达式求值

用一个stack s1存储数字,用 stack s2存储运算符号

当遇到(此时s2应该不论优先级的接收运算符

直到遇到)停止

stoi函数可以把字符串转换成十进制的数字 


  int solve(string s) {
        // write code here
        map<string, int> priority{
   
   {"+",0},{"-",0},{"*",1}};

        stack<string> s1, s2;

        for(int i = 0; i < s.size(); ++i)
        {
            if(s[i] >= '0' && s[i] <= '9')
            {
                int start = i;
                while(s[i] >= '0' && s[i] <= '9' && i < s.size())
                {
                    i++;
                }
                string str = s.substr(start, (i - start));
                s1.push(str);
                if(i != s.size()) i--;
            }
            else
            {
                if(s[i] == ')' && !s2.empty())
                {
                    while(s2.top() != "(")
                    {
                        s1.push(s2.top());
                        s2.pop();
                    }
                    s2.pop();
                }
                else{
                    if(s2.empty() || s2.top() == "(" || s[i] == '(') s2.push(string(1, s[i]));
                    else
                    {
                        if(priority[string(1, s[i])] <= priority[s2.top()])
                        {
                            s1.push(s2.top());
                            s2.pop();
                        }
                        s2.push(string(1, s[i]));
                    }
                }
            }
        }

        while(!s2.empty())
        {
            s1.push(s2.top());
            s2.pop();
        }

        while(!s1.empty())
        {
            s2.push(s1.top());
            s1.pop();
        }

        stack<int> st;

        while(!s2.empty())
        {
            if(s2.top() == "+" || s2.top() == "-" || s2.top() == "*")
            {
                int num1 = st.top(); st.pop();
                int num2 = st.top(); st.pop();
                if(s2.top() == "+") st.push(num1 + num2);
                else if(s2.top() == "-") st.push(num2 - num1);
                else if(s2.top() == "*") st.push(num2 * num1);
            }
            else
            {
                st.push(stoi(s2.top()));
            }
            s2.pop();
        }

        return st.top();
    }

猜你喜欢

转载自blog.csdn.net/weixin_71138261/article/details/129998459