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