アリババの2018期新卒のオンラインプログラミングテスト-研究開発エンジニアC/C++
25087 ワード
さっきアリババのプログラミングテストをしましたが、良いニュースは抽出した問題が他の問題に比べて簡単で、悪いニュースは編集が遅すぎて、終わっていません.
今テーマと自分が后で编んだコードをここに贴って、みんなの参考に供します.
タイトル:
1.複数の正の整数(2以上)をコマンドラインから入力し、1つのセットNを得る.2.Nから任意に2つの数を取り出して合計し、得られた値は集合Aを構成する.3.Nから任意に2つの数を取り出し、差分の絶対値を求め、得られた値は集合Bを構成する.4.集合Aと集合Bの中から、任意に2つの数を取り出して、その差の絶対値、また集合DDを構成する最小要素はd 1で、Dの最大要素はd 2で、Dの要素の個数はsですd 1+d 2+sを出力してください
テーマの要件
コンパイラバージョン:gcc 4.8.4標準入出力(stdin,stdout)を使用してください.すべてのプログラムを1つのファイルに書いてください.sys/stat.h、unistdなどの無効なグラフィック、ファイル、ネットワーク、システム関連のヘッダファイルと操作を使用しないでください.h , curl/curl.h , process.h時間制限:3 S(C/C++以外の言語:5 S)メモリ制限:128 M(C/C++以外の言語:640 M)入力:n//これは整数を入力する個数x 1//1番目の整数x 2//2番目の整数...xn//n番目の整数出力:m//一つの整数入力例:5101102103104105出力例:417
タイトルのコード:
自分で作成した領域:
学んだ新しい知識を評論する
forward iteratorは順方向反復器で、全部で5種類あります.
種類特性の例
反復器を入力して読み、書くことができなくて、自増istream_のみをサポートしますiterator
出力反復器書き込み、読み取り不能、自己増殖ostreamのみサポートiterator
順方向反復器の読み取りと書き込みは、自己増加unorderedのみをサポートします.map、unordered_set
双方向反復器の読み取りと書き込み、自己増加と自己減少map、set、listをサポート
ランダムアクセス反復器読み取りと書き込み、完全な反復器算術演算string、vector、dequeをサポート
今テーマと自分が后で编んだコードをここに贴って、みんなの参考に供します.
タイトル:
1.複数の正の整数(2以上)をコマンドラインから入力し、1つのセットNを得る.2.Nから任意に2つの数を取り出して合計し、得られた値は集合Aを構成する.3.Nから任意に2つの数を取り出し、差分の絶対値を求め、得られた値は集合Bを構成する.4.集合Aと集合Bの中から、任意に2つの数を取り出して、その差の絶対値、また集合DDを構成する最小要素はd 1で、Dの最大要素はd 2で、Dの要素の個数はsですd 1+d 2+sを出力してください
テーマの要件
コンパイラバージョン:gcc 4.8.4標準入出力(stdin,stdout)を使用してください.すべてのプログラムを1つのファイルに書いてください.sys/stat.h、unistdなどの無効なグラフィック、ファイル、ネットワーク、システム関連のヘッダファイルと操作を使用しないでください.h , curl/curl.h , process.h時間制限:3 S(C/C++以外の言語:5 S)メモリ制限:128 M(C/C++以外の言語:640 M)入力:n//これは整数を入力する個数x 1//1番目の整数x 2//2番目の整数...xn//n番目の整数出力:m//一つの整数入力例:5101102103104105出力例:417
タイトルのコード:
1 #include
2 #include
3 #include
4 #include
5 using namespace std;
6 // ,
7 // , , ^-^
8 int result(const vector <int>& inputs) {
9 return 0;
10 }
11
12 int main() {
13 int size = 0;
14 cin >> size;
15 cin.ignore (numeric_limits<:streamsize>::max(), '
');
16 vector<int> points;
17 for(size_t i=0; ii) {
18 int item;
19 cin >> item;
20 cin.ignore (numeric_limits<:streamsize>::max(), '
');
21 points.push_back(item);
22 }
23 int res = result(points);
24 cout << res << endl;
25 return 0;
26 }
自分で作成した領域:
1 // set
2 int result(const vector <int>& inputs) {
3 vector<int> vecA;
4 for (int i = 0; i < inputs.size() - 1; ++i)
5 {
6 for (int j = i + 1; j < inputs.size(); ++j)
7 {
8 vecA.push_back(inputs[i] + inputs[j]);
9 for (int k = 0; k < vecA.size() - 1; ++k)
10 {
11 if ((inputs[i] + inputs[j]) == vecA[k])
12 {
13 vecA.pop_back();
14 }
15 }
16 }
17 }
18
19 vector<int> vecB;
20 for (int i = 0; i < inputs.size() - 1; ++i)
21 {
22 for (int j = i + 1; j < inputs.size(); ++j)
23 {
24 vecB.push_back((abs)(inputs[i] - inputs[j]));
25 for (int k = 0; k < vecB.size() - 1; ++k)
26 {
27 if ((abs)(inputs[i] - inputs[j]) == vecB[k])
28 {
29 vecB.pop_back();
30 }
31 }
32 }
33 }
34
35 vector<int> vecD;
36 for (int i = 0; i < vecA.size(); ++i)
37 {
38 for (int j = 0; j < vecB.size(); ++j)
39 {
40 vecD.push_back((abs)(vecA[i] - vecB[j]));
41 for (int k = 0; k < vecD.size() - 1; ++k)
42 {
43 if ((abs)(vecA[i] - vecB[j]) == vecD[k])
44 {
45 vecD.pop_back();
46 }
47 }
48
49 }
50 }
51
52 int nMax, nMin;
53 nMax = nMin = vecD[0];
54 for (int k = 0; k < vecD.size(); ++k)
55 {
56 if (vecD[k] >= nMax)
57 {
58 nMax = vecD[k];
59 }
60 if (vecD[k] <= nMin)
61 {
62 nMin = vecD[k];
63 }
64 }
65 return nMax + nMin + vecD.size();
66 }
67
68 // vector
69 int result(const vector <int>& inputs) {
70 set<int> setA, setB, setD;
71
72 vector<int> vecA;
73 for (int i = 0; i < inputs.size() - 1; ++i)
74 {
75 for (int j = i + 1; j < inputs.size(); ++j)
76 {
77 vecA.push_back(inputs[i] + inputs[j]);
78 }
79 }
80 setA.insert(vecA.begin(), vecA.end());
81
82 vector<int> vecB;
83 for (int i = 0; i < inputs.size() - 1; ++i)
84 {
85 for (int j = i + 1; j < inputs.size(); ++j)
86 {
87 vecB.push_back((abs)(inputs[i] - inputs[j]));
88 }
89 }
90 setB.insert(vecB.begin(), vecB.end());
91
92 vector<int> vecD;
93 for (int i = 0; i < vecA.size(); ++i)
94 {
95 for (int j = 0; j < vecB.size(); ++j)
96 {
97 vecD.push_back((abs)(vecA[i] - vecB[j]));
98 }
99 }
100 setD.insert(vecD.begin(), vecD.end());
101 vector<int> ivec(setD.begin(), setD.end()); //set sort , vector .
102 sort(ivec.begin(), ivec.end());
103 cout << ivec[0] + ivec[ivec.size() - 1] + ivec.size();
104 return 0;
105 }
106
107 // vector
108 int result(const vector <int>& inputs) {
109 set<int> setA, setB, setD;
110
111 for (int i = 0; i < inputs.size() - 1; ++i)
112 {
113 for (int j = i + 1; j < inputs.size(); ++j)
114 {
115 setA.insert(inputs[i] + inputs[j]); // insert.
116 }
117 }
118
119 for (int i = 0; i < inputs.size() - 1; ++i)
120 {
121 for (int j = i + 1; j < inputs.size(); ++j)
122 {
123 setB.insert((abs)(inputs[i] - inputs[j]));
124 }
125 }
126
127 for (set<int>::iterator it1 = setA.begin(); it1 != setA.end(); ++it1)
128 {
129 for (set<int>::iterator it2 = setB.begin(); it2 != setB.end(); ++it2)
130 {
131 setD.insert((abs)(*it1 - *it2));
132 }
133 }
134 vector<int> ivec(setD.begin(), setD.end()); //set sort , vector .
135 sort(ivec.begin(), ivec.end());
136 return ivec[0] + ivec[ivec.size() - 1] + ivec.size();
137
138 }
学んだ新しい知識を評論する
//From
set<int> s, A, B, D;
for (auto i : inputs) //!C++11
s.insert(i); //!for {}
for (auto i = s.begin(); i != prev(s.end()); i++)//!prev,next
for (auto j = next(i); j != s.end(); j++)
{
A.insert(*i + *j);
}
for (auto i = s.begin(); i != prev(s.end()); i++)
for (auto j = next(i); j != s.end(); j++)
{
int tmp = *i - *j;
tmp = tmp > 0 ? tmp : -tmp;
B.insert(tmp);
}
//From Garcia-0
forward iteratorは順方向反復器で、全部で5種類あります.
種類特性の例
反復器を入力して読み、書くことができなくて、自増istream_のみをサポートしますiterator
出力反復器書き込み、読み取り不能、自己増殖ostreamのみサポートiterator
順方向反復器の読み取りと書き込みは、自己増加unorderedのみをサポートします.map、unordered_set
双方向反復器の読み取りと書き込み、自己増加と自己減少map、set、listをサポート
ランダムアクセス反復器読み取りと書き込み、完全な反復器算術演算string、vector、dequeをサポート