第一題是給你一堆坐標,找出里面可以組成矩形的點並且計算面積?忘記了,當時題目掃了一眼就直接跳過了。。。
第二題是一個隊列中元素進行一些列的操作,輸出是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網易虐我千百遍,我待網易如初戀。。。我大概和網易沒緣分吧,實習筆試刷我,杭研筆試刷我,有道筆試估計又要被刷,現在就剩個網易游戲了.......呵呵呵呵呵呵呵......
