跟着師姐做了下小米的筆試題,比較簡單就是主要字符串處理,下面就附上題解。
第一題就是輸入給你一個字符串,包含A數組、B數組、以及半徑R,讓你求出所有滿足Ai<=Bj且R>=Bj-Ai的整數對,若不存在滿足條件的Ai,則輸出距離Ai最近的Bj。
樣例輸入
A={1,3,5},B={2,4,6},R=1
輸出
(1,2)(3,4)(5,6)
代碼如下:
#include <iostream>
#include <string>
#include <string.h>
#include <vector>
#include <sstream>
#include <math.h>
using namespace std;
class Solution
{
public:
bool isNUM(char c)
{
return c<='9'&&c>='0';
}
vector<pair<int,int>> comp(vector<int> A,vector<int> B,int R)
{
vector<pair<int,int>> vec;
int p=0;
for(int i=0;i<A.size();i++)
{
while(B[p]<A[i]&&p<(B.size()-1)) p++;
vec.push_back(make_pair(A[i],B[p]));
int p1=p;
while((p1<(B.size()-1))&&(abs(A[i]-B[p1+1])<=R))
{
p1++;
vec.push_back(make_pair(A[i],B[p1]));
}
}
return vec;
}
vector<pair<int,int>> fsolution(string s)
{
int flag=3,R;
vector<int> A,B;
for(int i=0;i<s.size();i++)
{
if (s[i]==','||s[i]=='{'||s[i]=='}'||s[i]=='=')
continue;
if (s[i]=='A')
{
flag=0;
continue;
}
if (s[i]=='B')
{
flag=1;
continue;
}
if (s[i]=='R')
{
flag=2;
continue;
}
if(flag==0)
{
string num_str;
num_str+=s.substr(i,1);
while(isNUM(s[i+1]))
{
num_str+=s.substr(i+1,1);
i++;
}
int num=0;
stringstream ss(num_str);
ss>>num;
A.push_back(num);
}
if(flag==1)
{
string num_str;
num_str+=s.substr(i,1);
while(isNUM(s[i+1]))
{
num_str+=s.substr(i+1,1);
i++;
}
int num=0;
stringstream ss(num_str);
ss>>num;
B.push_back(num);
}
if(flag==2)
{
string num_str;
num_str+=s.substr(i,1);
while(isNUM(s[i+1]))
{
num_str+=s.substr(i+1,1);
i++;
}
int num=0;
stringstream ss(num_str);
ss>>num;
R=num;
}
}
return comp(A,B,R);
}
};
int main()
{
string s;
vector<pair<int,int>> v;
Solution *a=new Solution();
while(cin>>s)
{
v=a->fsolution(s);
for(auto p:v)
{
cout<<"("<<p.first<<","<<p.second<<")";
}
cout<<endl;
}
return 0;
}
第二題:倒序輸出輸入字符串,且處理符號
代碼如下
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Solution
{
public:
bool isNUM(char c)
{
return c<='9'&&c>='0';
}
bool isLETTER(char c)
{
return (c<='z'&&c>='a')||(c<='Z'&&c>='A');
}
void fsolution(string s)
{
vector<string> vec;
string str;
for(int i=0;i<s.size();i++)
{
if(isNUM(s[i])||(isLETTER(s[i])))
{
str+=s.substr(i,1);
while(isNUM(s[i+1])||(isLETTER(s[i+1]))||(((i+2)<s.size())&&s[i+1]=='-'&&(isNUM(s[i+2])||(isLETTER(s[i+2])))))
{
i++;
str+=s.substr(i,1);
}
vec.push_back(str);
str="";
}
}
for(int i=vec.size()-1;i>=0;i--)
{
cout<<vec[i]<<" ";
}
}
};
int main()
{
string s,str;
while(getline(cin,s))
{
str+=s;
}
Solution *a=new Solution();
a->fsolution(str);
return 0;
}