Practice-3 亚马逊在线测评题

来源:互联网 发布:服装收银软件排行 编辑:程序博客网 时间:2024/04/29 14:56

今年帮人做了下亚马逊的在线测评题,题和代码如下如下

稍微推导一下发现符合杨辉三角,代码如下

int calcMaxVertex(vector < int > numbers) {vector<int> factor = {1,1};while (factor.size() < numbers.size()){vector<int>temp;temp.push_back(factor.front());for (vector<int>::iterator i = factor.begin() + 1; i != factor.end(); ++i)temp.push_back(*i + *(i - 1));temp.push_back(factor.back());factor = temp;}int result = 0;sort(numbers.begin(), numbers.end());sort(factor.begin(), factor.end());for (int i = 0; i < numbers.size(); ++i)result += factor[i] * numbers[i];return result;}

可以用深度收索来做,代码如下

class Point{public:Point(){};Point(int a, int b):x(a),y(b){}int x;//行int y;//列bool operator==(const Point pt){return x == pt.x&&y == pt.y;}};int mv[8][2] = { { 1, 0 },{ -1, 0 }, { 0, -1 }, { 0, 1 }, { -1, 1 }, { -1, -1 }, { 1, 1 }, { 1, -1 } };int n, m;//n行m列int** map;int ways=0;void DFS(Point start, Point end, int step,int deadline){if (step == deadline&&start == end){++ways;return;}if (step >deadline)return;for (int i = 0; i < 8; ++i){if (start.x + mv[i][0] >= 0 && start.x + mv[i][0] < n&&start.y + mv[i][1] >= 0 && start.y + mv[i][1] < m&&map[start.x + mv[i][0]][start.y + mv[i][1]]!=1){int temp = map[start.x + mv[i][0]][start.y + mv[i][1]];map[start.x + mv[i][0]][start.y + mv[i][1]] = 1;DFS(Point(start.x + mv[i][0], start.y + mv[i][1]), end, step + 1, deadline);map[start.x + mv[i][0]][start.y + mv[i][1]] = temp;}}}int main(){//#define T 33//cout << (1 << T) << endl;//int i = 1;//unsigned j = 1;//char ch = 1;////cout << "int:" << (i << T) << endl;//printf("%p\n", i<<T);//cout <<"unsigned:"<< (j << T) << endl;//printf("%p\n", j<<T);//cout << "char:"<<(ch << T) << endl;//printf("%p\n", ch<<T);//FILE *p;//freopen_s(&p, "c:\\1.txt", "r",stdin);cin >> n >> m;map = new int*[n];Point start,end;for (int i = 0; i < n; ++i){map[i] = new int[m];for (int j = 0; j < m; ++j){cin >> map[i][j];if (map[i][j] == 1){start.x = i;start.y = j;}if (map[i][j] == 2){end.x = i;end.y = j;}}}int deadlin;cin >> deadlin;DFS(start, end, 1, deadlin);cout << ways;for (int i = 0; i < n; ++i)delete[] map[i];}


0 0
原创粉丝点击