网易有道2017内推编程题
生活随笔
收集整理的這篇文章主要介紹了
网易有道2017内推编程题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
網(wǎng)易有道2017內推編程題
- 兩道題,都只要找到了規(guī)律就比較好些,然后就是一些細節(jié)處理!
題目一
- 洗牌在生活中十分常見,現(xiàn)在需要寫一個程序模擬洗牌的過程。 現(xiàn)在需要洗2n張牌,從上到下依次是第1張,第2張,第3張一直到第2n張。首先,我們把這2n張牌分成兩堆,左手拿著第1張到第n張(上半堆),右手拿著第n+1張到第2n張(下半堆)。接著就開始洗牌的過程,先放下右手的最后一張牌,再放下左手的最后一張牌,接著放下右手的倒數(shù)第二張牌,再放下左手的倒數(shù)第二張牌,直到最后放下左手的第一張牌。接著把牌合并起來就可以了。 例如有6張牌,最開始牌的序列是1,2,3,4,5,6。首先分成兩組,左手拿著1,2,3;右手拿著4,5,6。在洗牌過程中按順序放下了6,3,5,2,4,1。把這六張牌再次合成一組牌之后,我們按照從上往下的順序看這組牌,就變成了序列1,4,2,5,3,6。 現(xiàn)在給出一個原始牌組,請輸出這副牌洗牌k次之后從上往下的序列。
題目二
做取出隊頭的值操作的時候,并不彈出當前隊頭。小明同學發(fā)現(xiàn),這段程序恰好按順序輸出了1,2,3,...,n?,F(xiàn)在小明想讓你構造出原始的隊列,你能做到嗎?
題目來源nowcoder
解析
#include<iostream> #include<math.h>#include <vector> #include <string> #include <deque> #include <stack> #include <queue> #include <map> #include <unordered_map> #include <set> #include <unordered_set>#include <algorithm> #include <functional> #include <numeric> //accmulate#include <fstream> #include <iomanip> //setprecision() setw() using namespace std;//#define cin infile //一定不能再oj系統(tǒng)中,有錯,導致超時等!!! //C++文件輸入 ifstream infile("in.txt", ifstream::in);#include <limits> #define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */ #define INT_MAX 2147483647 /* maximum (signed) int value *///第二題 #if 1//反向推到一下://將順序序列處理得出結果 //比如1 2 3 4 5,先將5插入到3、4之間(隔1),得到1 2 3 5 4,再將4插入到2、3之間(隔2),得到1 2 4 3 5,再將5插入 //到1、2之間(隔3),得到1 5 2 4 3,最后將3插入到1前面(隔4),得到最終結果:3 1 5 2 4 //從上面例子可看出,不斷的將最后一個元素插入到前面,規(guī)律為相隔元素個數(shù)依次遞增,上面是從1到4int main() {int T;cin >> T;for (int i = 0; i < T;i++){int n;cin >> n;vector<int> vec;for (int i = 0; i < n; i++){vec.push_back(i + 1);}for (int i = 0; i < n-1; i++){int back = vec.back();int j = 0;for (j= n-1; j >=n-i-1;j--){vec[j] = vec[j - 1];}vec[j] = back;}for (int i = 0; i < n;i++){if (i==0){cout << vec[i];}else{cout << " " << vec[i];}}cout << endl;}return 0; }#endif//第一題 #if 0void fun(vector<int> vec,int k) {int n = vec.size() / 2;while (k--){vector<int> n1(vec.begin(), vec.end());for (int i = 0; i < n; ++i){vec[2 * i] = n1[i];vec[2 * i + 1] = n1[i + n];}}for (int i = 0; i < vec.size(); i++){if (i == vec.size() - 1){cout << vec[i];}else{cout << vec[i] << " ";}}cout << endl; }//3 //3 1 //1 2 3 4 5 6 //3 2 //1 2 3 4 5 6 //2 2 //1 1 1 1int main() {int T;cin >> T;//vector<vector<int>> vecs;//vector<int> times;for (int i = 0; i < T; i++){int n, k;cin >> n >> k;//times.push_back(k);vector<int> vec(2 * n); //預先分配了內存才用: cin >> vec[j];for (int j = 0; j < 2 * n; j++){/*int data;cin >> data;vec.push_back(data);*/cin >> vec[j];}//vecs.push_back(vec);//fun(vec, k);for (int i = 0; i < k; i++){vector<int> left(vec.begin(), vec.begin() + n);vector<int> right(vec.begin() + n, vec.end());vec.clear();for (int j = 0; j < n; j++){vec.push_back(left[j]);vec.push_back(right[j]);}}for (int i = 0; i < vec.size(); i++){if (i == vec.size() - 1){cout << vec[i];}else{cout << vec[i] << " ";}}cout << endl;}//for (int i = 0; i < T;i++)//{// fun(vecs[i],times[i]);//}return 0; }#endif#if 0int main() {int num = 5;vector<int> table(num);for (int i = 0; i < num; ++i)cin >> table[i];copy(table.begin(), table.end(), ostream_iterator<int>(cout, " "));return 0; }#endif總結
以上是生活随笔為你收集整理的网易有道2017内推编程题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1、TSM简介
- 下一篇: 嵌入式开发之网络心跳包---阻塞和非阻塞