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();
}