8.20讯飞笔试
选择题太多,编程题很容易
1. 求和1/2,2/3,3/5...前n项和
float seqSum(int n) {
// write code here
float res(0),fz(1),fm(2);
for(int i=0;i<n;i++){
res+=fz/fm;
float temp=fz;
fz=fm;
fm=temp+fm;
}
return round(res*100)/100;
} 2.验证合法字符串
bool signalVerify(string signal) {
// write code here
if(!(signal[0]>='a'&&signal[0]<='z')) return false;
if(signal[1]!='=') return false;
if(signal[2]==' ') return false;
for(int i=2;i<signal.size();i++){
if(!(signal[i]>='a'&&signal[i]<='z')&&!(signal[i]>='0'&&signal[i]<='9')&&signal[i]!=' ') return false;
}
return true;
} 3.迷宫有多个入口,找到到目的地的最短路径 int dirc[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
vector<Point> res;
void dfs(Point cur, vector<Point> pre, vector<vector<int>> &maze)
{
int i = cur.x;
int j = cur.y;
if (i < 0 || j < 0 || i > 3 || j > 3 || maze[i][j] == 1) return;
pre.emplace_back(i, j);
if (maze[i][j] == 8)
{
if (res.empty())res = pre;
else res = res.size() > pre.size() ? pre : res;
return;
}
maze[i][j] = 1;
for (int k = 0; k < 4; k++)
{
int nexti = i + dirc[k][0];
int nextj = j + dirc[k][1];
dfs({nexti, nextj}, pre, maze);
}
maze[i][j] = 0;
}
vector<Point> winMazeGift(vector<vector<int>> &maze)
{
vector<Point> enter;
for (int i = 1; i <= 2; i++)
{
if (maze[i][0] != 1) enter.emplace_back(i, 0);
if (maze[i][3] != 1) enter.emplace_back(i, 3);
}
for (int i = 0; i < 4; i++)
{
if (maze[0][i] != 1 ) enter.emplace_back(0, i);
if (maze[3][i] != 1) enter.emplace_back(3, i);
}
vector<Point> pre;
for (auto i : enter)
{
dfs(i, pre, maze);
}
return res;
} 