第一題是給你一堆坐標,找出里面可以組成矩形的點並且計算面積?忘記了,當時題目掃了一眼就直接跳過了。。。
第二題是一個隊列中元素進行一些列的操作,輸出是1,2,3,4....n按順輸出,問你原來的序列是多少。
這個其實就是每次都跳過一個可用位置然后在下一個位置放入數字,如果到達容器尾部,那么再從頭開始搜索,知道全部位置都放了數字。
簡直天殺的,這個最后我調出來超時了2分鍾,結果自動交卷了 T T碼代碼的速度很重要啊,還有OJ平台是真的爛,筆試的平台感覺一個比一個爛!
代碼如下:
#include <iostream> #include <queue> #include <stack> using namespace std; int findNextIndex(vector<int> &isSelected, int index) { int count = 0; int res = 0; for (int i = index; i <= isSelected.size(); i++) { if (i == isSelected.size()) { i = 0; } if (isSelected[i] == 0 && count == 0) { count = 1; } else if (isSelected[i] == 0 && count == 1) { res = i; break; } } return res; } int main() { int n; cin >> n; vector<vector<int>> res; while (n > 0) { n--; int k; cin >> k; vector<int> isSelected(k, 0); vector<int> result(k, 0); int count = 1; int curNum = 1; int index = 0; while (curNum <= k) { index = findNextIndex(isSelected, index); result[index] = curNum; curNum++; isSelected[index] = 1; } res.push_back(result); } for (int i = 0; i < res.size(); i++) { for (int j = 0; j < res[i].size(); j++) { cout << res[i][j] << " "; } cout << endl; } cout << endl; }
第三題是洗牌算法,給你一堆牌里面有2n張牌,讓你洗K次,每次將2n張牌分為2堆,1-n和n+1-2n,然后先放右手1張牌,再放左手一張牌。。。如此反復,直到所有牌都放完,其實還是很簡單,但是感覺每次碼代碼都有各種小問題,我就因為只存了左手的數結果折騰了半天,太傻X了。。。。
思路就是:交錯放置,其實我的代碼並不怎么好,每次都要生成O(n)的額外空間,感覺效率也不怎么樣,反正OJ平台也沒給我任何反饋,也不知道對不對。。。。
#include <vector> #include <iostream> using namespace std; void swapinsert(vector<int> &source, int n ) { vector<int> temp( source ); for (int i = 0; i < n ; i++) { source[2 * i] = temp[i]; source[2 * i + 1] = temp[n + i]; } } int main() { int m; cin >> m; vector < vector<int>> res; while (m > 0) { int n; int k; cin >> n >> k; vector<int> source; int num; for (int i = 0; i < 2 * n; i++) { cin >> num; source.push_back(num); } m--; while (k > 0) { swapinsert(source, n); k--; } res.push_back(source); } for (int i = 0; i < res.size(); i++) { for (int j = 0; j < res[i].size(); j++) { cout << res[i][j] << " "; } cout << endl; } }
又是一次失敗的筆試T T網易虐我千百遍,我待網易如初戀。。。我大概和網易沒緣分吧,實習筆試刷我,杭研筆試刷我,有道筆試估計又要被刷,現在就剩個網易游戲了.......呵呵呵呵呵呵呵......