2018年爱奇艺校招笔试
我選的是前端方向,所以編程題的題目也比較簡單,但是坑很多呀,不知道錯在哪,最后沒辦法直接用最暴力的方法AC了。
?
筆試分為選擇和編程,選擇20個,每個三分,編程題兩道每道20分。
選擇題考點:
1、數據結構(包括大頂堆、希爾排序、B-樹、以及hash)
2、計算機網絡(只考了一兩題,TCP和UDP)
3、數據庫(表設計)
4、HTML/CSS(CSS3、翻書效果怎么實現、一張圖上映射多個區域)
5、JS(禁止前進和后退、作用域)
我有印象的應該就是作用域的這個題了:
下面這個代碼輸出什么(如果我沒記錯,應該就是原題目)
<!DOCTYPE html> <html> <script>function func() {document.write(a);document.write(fun);var a = 1;function fun(){return 2;}} </script><body><a onclick="func()">點擊我</a> </body> </html>
編程題:其實都挺簡單的,但是第一題我沒想對坑點,我想到的點似乎都沒這樣的數據。
第一題:
幸運ID
時間限制:C/C++語言 1000MS;其他語言 3000MS
內存限制:C/C++語言 131072KB;其他語言 655360KB
題目描述:
小C有一張票,這張票的ID是長度為6的字符串,每個字符都是數字,他想讓這個ID變成他的辛運ID,所以他就開始更改ID,每一次操作,他可以選擇任意一個數字并且替換它。
如果這個ID的前三位數字之和等于后三位數字之和,那么這個ID就是辛運的。你幫小C求一下,最少需要操作幾次,能使ID變成辛運ID
輸入
輸入只有一行,是一個長度為6的字符串。
輸出
輸出這個最小操作次數
樣例輸入
000000
樣例輸出
0
Hint
輸入樣例2
000018
輸出樣例2
1
樣例解釋:將前三位任意一個改為9即可滿足條件,操作數為1
AC代碼:(直接暴力貪心解決)
// Asimple #include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <string> #include <cstring> #include <cmath> using namespace std; typedef long long ll;const int maxn = 100000+5; ll n, m, T, len, cnt, num, ans, Max, k; string str; int max_a[3], min_a[3];void input(){while( cin >> str ) {int sum1 = 0, sum2 = 0;for(int i=0; i<6; i++) {if( i < 3 ) sum1 += (str[i]-'0');else sum2 += (str[i]-'0');}int cnt = abs(sum1-sum2);if( sum1>sum2 ) {for(int i=0; i<6; i++) {if( i<3 ) max_a[i] = max((str[i]-'0'), 9-(str[i]-'0'));else min_a[i-3] = max((str[i]-'0'), 9-(str[i]-'0'));}} else {for(int i=0; i<6; i++) {if( i>=3 ) max_a[i-3] = max((str[i]-'0'), 9-(str[i]-'0'));else min_a[i] = max((str[i]-'0'), 9-(str[i]-'0'));}}sort(max_a, max_a+3); sort(min_a, min_a+3);int res = 0, j = 2, i = 2;while( cnt > 0 ) {int te = max(max_a[i], min_a[j]);cnt -= te;if( te == max_a[i] ) i--;else j --;res ++;}cout << res << endl;} }int main() {input();return 0; }
91%代碼(第一版就是91%,之后改的只降不升,最后十分鐘無能為力只能暴力AC,求大神找出坑點)
// Asimple #include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <queue> #include <vector> #include <string> #include <cstring> #include <stack> #include <set> #include <map> #include <cmath> using namespace std; typedef long long ll;const int maxn = 100000+5; ll n, m, T, len, cnt, num, ans, Max, k; //vector<int> a[maxn]; string str; int a[10];void input(){while( cin >> str ) {memset(a, sizeof(a), 0);int sum1 = 0, sum2 = 0;for(int i=0; i<6; i++) {if( i < 3 ) sum1 += (str[i]-'0');else sum2 += (str[i]-'0');}int cnt = abs(sum1-sum2);int res = cnt/9 + (cnt%9!=0);// 下面這個判斷是我想的坑點// 但是沒有下面的語句一樣也是91%if( cnt == 9 ) {if( a[0]+a[9] == 0 ) res++;} else if( cnt == 18 ) {if( a[0]+a[9]<2 ) res ++;}cout << res << endl;}// pas; }int main() {input();return 0; }
第二題:
局長的食物
時間限制:C/C++語言 1000MS;其他語言 3000MS
內存限制:C/C++語言 131072KB;其他語言 655360KB
題目描述:
局長有N種食物,每種食物有Ai份。
每天局長會吃一份食物,或者買一份食物(即每天只能進行吃或買其中的一種動作),這樣過了M天
現在局長想知道M天后第p種食物的份數排名(從大到小,相同算并列,例如3 3 2,則排名為1 1 3)
N,M,P<=100,Ai<=1000
輸入
第一行N M P
第二行N個數Ai
接下來M行,每行A i或者B i分別表示買一份食物i,吃一份食物i
輸出
一個答案
樣例輸入
3 4 2
5 3 1
B 1
A 2
A 2
A 3
樣例輸出
1
簡單排序,注意名次的增加就好
AC代碼:
// Asimple #include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <queue> #include <vector> #include <string> #include <cstring> #include <stack> #include <set> #include <map> #include <cmath> #define INF 0x3f3f3f3f #define debug(a) cout<<#a<<" = "<<a<<endl #define test() cout<<"============"<<endl #define CLS(a,v) memset(a, v, sizeof(a)) #define pas system("pause") using namespace std; typedef long long ll; typedef unsigned long long ull; int dx[] = {-1,1,0,0,-1,-1,1,1}, dy[]={0,0,-1,1,-1,1,1,-1}; const int maxn = 1000+5; const ll mod = 1000000007; ll n, m, T, len, cnt, num, ans, Max, k; //vector<int> a[maxn]; struct node{int ind;int sum;bool operator < (const node& a) const {return sum>a.sum;} }; node a[maxn];void input(){int p;while( cin >> n >> m >> p ) {for(int i=1; i<=n; i++) {cin >> a[i].sum;a[i].ind = i;}char ch;while( m -- ) {cin >> ch >> num;if( ch == 'A' ) {a[num].sum ++;} else {if( a[num].sum>0) a[num].sum --;}}sort(a+1, a+n+1);int cnt = 0, te = 1;a[0].sum = -1;for(int i=1; i<=n; i++) {if( a[i].sum !=a[i-1].sum ) {cnt += te;te = 1;} else {te ++;}if( a[i].ind == p ) {cout << cnt << endl;break;}}}// pas; }int main() {input();return 0; }
?
轉載于:https://www.cnblogs.com/Asimple/p/9650613.html
總結
以上是生活随笔為你收集整理的2018年爱奇艺校招笔试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大家族是谁画的呢?
- 下一篇: MFC控件编程之复选框单选框分组框