網易互聯網產品策劃筆試,網易2017春招筆試真題編程題集合

 2023-10-15 阅读 27 评论 0

摘要:網易2017春招筆試真題編程題集合 題目來源:牛客網 https://www.nowcoder.com/profile/7952866/test/7811777/83061 1、雙核處理 題目描述 一種雙核CPU的兩個核能夠同時的處理任務,現在有n個已知數據量的任務需要交給CPU處理,假設已知CPU的每個核1秒可以處

網易2017春招筆試真題編程題集合

題目來源:牛客網 https://www.nowcoder.com/profile/7952866/test/7811777/83061

1、雙核處理

題目描述

一種雙核CPU的兩個核能夠同時的處理任務,現在有n個已知數據量的任務需要交給CPU處理,假設已知CPU的每個核1秒可以處理1kb,每個核同時只能處理一項任務。n個任務可以按照任意順序放入CPU進行處理,現在需要設計一個方案讓CPU處理完這批任務所需的時間最少,求這個最小的時間。

輸入描述

輸入包括兩行: 第一行為整數n(1 ≤ n ≤ 50)

      ? ?第二行為n個整數lengthi,表示每個任務的長度為length[i]kb,每個數均為1024的倍數。

網易互聯網產品策劃筆試?輸出描述 :輸出一個整數,表示最少需要處理的時間

輸入例子 :5

     3072 3072 7168 3072 1024

輸出例子: 9216

思路分析:

題意很清晰,就是給一個數組,要我們把他分成兩份并分別求和,使得這兩個和的最大值最小。我下意識的想法是枚舉出所有有可能的和,但是復雜度大概是O(2^n) ,貌似會超時。可是仔細一看,length[i] 的取值在[1, 4096] 之間,那么最多n個數的和的范圍肯定在[n, 4096n] 之間。

代碼:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<set>
 4 using namespace std;
 5 int n;
 6 int a[51];
 7 set<int>s;
 8 int sum = 0;
 9 int main()
10 {
11     cin >> n;
12     for (int i = 0; i<n; i++)
13     {
14         int tmp;
15         cin >> tmp;
16         a[i] = tmp / 1024;
17         sum += a[i];
18     }
19     s.insert(0);
20     for (int i = 0; i<n; i++)
21     {
22         set<int>added;
23         for (set<int>::iterator it = s.begin(); it != s.end(); it++)
24         {
25             added.insert(*it + a[i]);
26         }
27         s.insert(added.begin(), added.end());
28     }
29     int ans = sum;
30     for (set<int>::iterator it = s.begin(); it != s.end(); it++)
31     {
32         ans = min(ans, max(*it, sum - *it));
33     }
34     cout << ans * 1024 << endl;
35 }

結果:

廣東事業單位考試真題、

2、趕去公司

題目描述

終于到周末啦!小易走在市區的街道上準備找朋友聚會,突然服務器發來警報,小易需要立即回公司修復這個緊急bug。假設市區是一個無限大的區域,每條街道假設坐標是(X,Y),小易當前在(0,0)街道,辦公室在(gx,gy)街道上。小易周圍有多個出租車打車點,小易趕去辦公室有兩種選擇,一種就是走路去公司,另外一種就是走到一個出租車打車點,然后從打車點的位置坐出租車去公司。每次移動到相鄰的街道(橫向或者縱向)走路將會花費walkTime時間,打車將花費taxiTime時間。小易需要盡快趕到公司去,現在小易想知道他最快需要花費多少時間去公司。 輸入描述: 輸入數據包括五行:

第一行為周圍出租車打車點的個數n(1 ≤ n ≤ 50)

第二行為每個出租車打車點的橫坐標tX[i] (-10000 ≤ tX[i] ≤ 10000)

第三行為每個出租車打車點的縱坐標tY[i] (-10000 ≤ tY[i] ≤ 10000)

2019年執業藥師考試試題真題,第四行為辦公室坐標gx,gy(-10000 ≤ gx,gy ≤ 10000),以空格分隔

第五行為走路時間walkTime(1 ≤ walkTime ≤ 1000)和taxiTime(1 ≤ taxiTime ≤ 1000),以空格分隔

輸出描述: 輸出一個整數表示,小易最快能趕到辦公室的時間

輸入例子: 2

    -2? -2

教師資格證面試真題,    0?? -2

    -4?? -2

    15?? 3

輸出例子: 42

思路分析

基礎題,先算步行的時間,再枚舉每個打車點算出打的時間,找到時間最短的即可。直接進行比較就可以,沒有復雜的過程。

代碼:

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 int main()
 5 {
 6     int n;
 7     cin >> n;
 8     vector<int> taxiX(n, 0);
 9     vector<int> taxiY(n, 0);
10     for (int i = 0; i < n; i++)
11         cin >> taxiX[i];
12     for (int i = 0; i < n; i++)
13         cin >> taxiY[i];
14     int gx, gy;
15     cin >> gx >> gy;
16     int taxiTime, walkTime;
17     cin >> walkTime >> taxiTime;
18     int ans = walkTime*(abs(gx) + abs(gy)); //不打車所用的時間
19     for (int j = 0; j < n; j++)
20     {
21         int tmp = walkTime*(abs(taxiX[j]) + abs(taxiY[j])) + taxiTime*(abs(gx - taxiX[j]) + abs(gy - taxiY[j]));
22         if (tmp < ans)
23             ans = tmp;
24     }
25     cout << ans << endl;
26     return 0;
27 }

結果:

網易游戲運營筆試題及答案?

3、調整隊形

題目描述

在幼兒園有n個小朋友排列為一個隊伍,從左到右一個挨著一個編號為(0~n-1)。其中有一些是男生,有一些是女生,男生用’B’表示,女生用’G’表示。小朋友們都很頑皮,當一個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少。你只能在原隊形上進行調整,每次調整只能讓相鄰的兩個小朋友交換位置,現在需要盡快完成隊伍調整,你需要計算出最少需要調整多少次可以讓上述情況最少。例如: GGBBG -> GGBGB -> GGGBB 這樣就使之前的兩處男女相鄰變為一處相鄰,需要調整隊形2次 輸入描述: 輸入數據包括一個長度為n且只包含G和B的字符串.n不超過50.

輸出描述: 輸出一個整數,表示最少需要的調整隊伍的次數

輸入例子: GGBBG

輸出例子: 2

思路分析:

網易筆試題目?我們對于串中第一個’B’然后計算把它swap到第一個位置需要多少次,第二個’B’swap到第二個位置需要多少次…依次類推..
然后對于’G’同理, 最后取個較小值即為答案。

代碼:

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     string str;
10     cin >> str;
11     int boyCount = 0, girlCount = 0, boy = 0, girl = 0;
12     for (int i = 0; i < str.size(); i++)
13     {
14         if (str[i] == 'B')
15         {
16             boyCount += i - boy;
17             boy++;
18         }
19         else
20         {
21             girlCount += i - girl;
22             girl++;
23         }
24     }
25     cout << min(boyCount, girlCount) << endl;
26 }

結果:

4、魔力手環

題目描述

小易擁有一個擁有魔力的手環上面有n個數字(構成一個環),當這個魔力手環每次使用魔力的時候就會發生一種奇特的變化:每個數字會變成自己跟后面一個數字的和(最后一個數字的后面一個數字是第一個),一旦某個位置的數字大于等于100就馬上對100取模(比如某個位置變為103,就會自動變為3).現在給出這個魔力手環的構成,請你計算出使用k次魔力之后魔力手環的狀態。

輸入描述: 輸入數據包括兩行: 第一行為兩個整數n(2 ≤ n ≤ 50)和k(1 ≤ k ≤ 2000000000),以空格分隔 第二行為魔力手環初始的n個數,以空格分隔。范圍都在0至99.

輸出描述: 輸出魔力手環使用k次之后的狀態,以空格分隔,行末無空格。

網易游戲筆試。輸入例子: 3 2

    ? 1 2 3

輸出例子: 8 9 7

思路分析:

直接按邏輯進行運算,比較費時,推薦使用快速矩陣冪算法,這里采用的是直接算。

代碼:

 1 #include<iostream>
 2 #include<vector>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int n, k;
 9     cin >> n >> k;
10     vector<long> arr ;
11     for (int i = 0; i <= n; i++)
12         arr.push_back(0);
13     for (int i = 1; i <= n; i++)
14         cin >> arr[i];
15     vector<long> tmp = arr;
16     for (int j = 1; j <= k; j++)
17     {
18         int i = 1;
19         while (i < n )
20         {
21             tmp[i] += arr[i + 1];
22             if (tmp[i]>100)
23                 tmp[i]%= 100;
24             i++;
25         }
26         while (i==n)
27         {
28             tmp[i] += arr[1];
29             if (tmp[i]>100)
30                 tmp[i] %= 100;
31             i++;
32         }
33         arr = tmp;
34     }
35     cout << arr[1];
36     for (int i = 2; i <= n; i++)
37         cout <<" "<< arr[i];
38     cout << endl;
39     return 0;
40 }

結果:

5、集合

題目描述

網易秋招筆試題。小易最近在數學課上學習到了集合的概念,集合有三個特征:1.確定性 2.互異性 3.無序性. 小易的老師給了小易這樣一個集合: S = { p/q | w ≤ p ≤ x, y ≤ q ≤ z } 需要根據給定的w,x,y,z,求出集合中一共有多少個元素。小易才學習了集合還解決不了這個復雜的問題,需要你來幫助他。

輸入描述: 輸入包括一行: 一共4個整數分別是w(1 ≤ w ≤ x),x(1 ≤ x ≤ 100),y(1 ≤ y ≤ z),z(1 ≤ z ≤ 100).以空格分隔

輸出描述: 輸出集合中元素的個數

輸入例子: 1 10 1 1

輸出例子: 10

思路分析

互聯網秋招筆試,題意就是給分數判重,顯然我們不能直接算,因為浮點數是不精確的,乘以1.0000就可以了,然后丟進set里就好了。

代碼:

 1 #include<iostream>
 2 #include<set>
 3 using namespace std;
 4 int getSetNum(int w, int x, int y, int z)
 5 {
 6     int count = 0;
 7     set<double> s;
 8     for (int i = w; i <= x; i++)
 9         for (int j = y; j <= z; j++)
10         {
11             s.insert(i*1.0000 / j);
12         }
13     count = s.size();
14     return count;
15 }
16 int main()
17 {
18     int w, x, y, z;
19     cin >> w >> x >> y >> z;
20     int ans;
21     ans = getSetNum(w, x, y, z);
22     cout << ans << endl;
23     return 0;
24 }

結果:

6、奇怪的表達式求值

題目描述

常規的表達式求值,我們都會根據計算的優先級來計算。比如/的優先級就高于+-。但是小易所生活的世界的表達式規則很簡單,從左往右依次計算即可,而且小易所在的世界沒有除法,意味著表達式中沒有/,只有(+, - 和 )。現在給出一個表達式,需要你幫忙計算出小易所在的世界這個表達式的值為多少

輸入描述: 輸入為一行字符串,即一個表達式。其中運算符只有-,+,*。參與計算的數字只有0~9. 保證表達式都是合法的,排列規則如樣例所示。

輸出描述: 輸出一個數,即表達式的值

網易校招題目?輸入例子: 3+5*7

輸出例子: 56

思路分析:

關鍵之處在于:輸入的一個數字和下一個數字之間肯定隔著一個操作符,所以在第一個for循環的時候i=i+2,依次取數,再取操作符進行運算。

代碼:

#include<iostream>
#include<string>
using namespace std;int main()
{string str;cin >> str;int ans = str[0] - '0';for (int i = 1; i < str.length() - 1; i += 2){//關鍵之處i+=2if (str[i] == '*')ans = ans * (str[i + 1] - '0');else if (str[i] == '+')ans = ans + (str[i + 1] - '0');else {ans = ans - (str[i + 1] - '0');}}cout << ans << endl;return 0;
}

結果:

7、小易記單詞

題目描述

小易參與了一個記單詞的小游戲。游戲開始系統提供了m個不同的單詞,小易記憶一段時間之后需要在紙上寫出他記住的單詞。小易一共寫出了n個他能記住的單詞,如果小易寫出的單詞是在系統提供的,將獲得這個單詞長度的平方的分數。注意小易寫出的單詞可能重復,但是對于每個正確的單詞只能計分一次。

輸入描述: 輸入數據包括三行:

  第一行為兩個整數n(1 ≤ n ≤ 50)和m(1 ≤ m ≤ 50)。以空格分隔

  第二行為n個字符串,表示小易能記住的單詞,以空格分隔,每個單詞的長度小于等于50。

  第三行為m個字符串,系統提供的單詞,以空格分隔,每個單詞的長度小于等于50。

輸出描述: 輸出一個整數表示小易能獲得的分數

輸入例子: 3 4

    apple orange strawberry strawberry orange grapefruit watermelon

輸出例子: 136

思路分析

把能記住的單詞丟進set里,可以去除重復單詞,合理利用set的insert函數,然后判斷每一個是不是在系統提供的集合里即可。

代碼:

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 #include<set>
 5 //為了避免重復,將單詞放入set里
 6 using namespace std;
 7 
 8 int main()
 9 {
10     int n, m;
11     cin >> n >> m;
12     set<string> str1, str2;
13     for (int i = 0; i<n; i++)
14     {
15         //讀入小易記住的單詞
16         string str;
17         cin >> str;
18         str1.insert(str);
19     }
20     for (int i = 0; i<m; i++)
21     {
22         //讀入系統提供的單詞
23         string str;
24         cin >> str;
25         str2.insert(str);
26     }
27     int ans = 0;
28     for (set<string>::iterator it = str1.begin(); it != str1.end(); it++)
29     {
30         if (str2.find(*it) != str2.end())
31         {
32             //find()函數返回指向查找元素的迭代器,如果不存在返回set的end()迭代器.
33             ans += it->length() * it->length();//計算分數:單詞長度的平方
34         }
35     }
36     cout << ans << endl;
37 }

結果:

8、消除重復元素

題目描述

小易有一個長度為n序列,小易想移除掉里面的重復元素,但是小易想是對于每種元素保留最后出現的那個。小易遇到了困難,希望你來幫助他。

輸入描述:

輸入包括兩行: 第一行為序列長度n(1 ≤ n ≤ 50)

      ?? 第二行為n個數sequencei,以空格分隔

輸出描述: 輸出消除重復元素之后的序列,以空格分隔,行末無空格

輸入例子: 9

    100 100 100 99 99 99 100 100 100

輸出例子: 99 100

思路分析

從后向前先判重后加入即可,合理利用集合set的insert函數,去除重復元素

代碼:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<vector>
 4 #include<set>
 5 
 6 //從后向前先判重后加入即可。
 7 using namespace std;
 8 int main()
 9 {
10     int n;
11     cin >> n;
12     int a[51] = { 0 };
13     vector<int> arr;
14     set<int> s;
15     for (int i = 0; i < n; i++)
16         cin >> a[i];
17     for (int i = n - 1; i >= 0; i--)
18     {
19         if (s.find(a[i]) == s.end())
20         {
21             s.insert(a[i]);
22             arr.push_back(a[i]);
23         }
24     }
25     cout << arr[arr.size() - 1];
26     for (int i = arr.size() - 2; i >= 0; i--)
27     {
28         cout << " " << arr[i];
29     }
30     cout << endl;
31     return 0;
32 }

結果:

9、涂棋盤

題目描述

小易有一塊n*n的棋盤,棋盤的每一個格子都為黑色或者白色,小易現在要用他喜歡的紅色去涂畫棋盤。小易會找出棋盤中某一列中擁有相同顏色的最大的區域去涂畫,幫助小易算算他會涂畫多少個棋格。

輸入描述: 輸入數據包括n+1行:

  第一行為一個整數n(1 ≤ n ≤ 50),即棋盤的大小

  接下來的n行每行一個字符串表示第i行棋盤的顏色,’W’表示白色,’B’表示黑色

輸出描述: 輸出小易會涂畫的區域大小

輸入例子: 3

     BWW

     BBB

     BWB

輸出例子: 3

思路分析:

注意,只是找某一列的最大區域,并不是整個棋盤的最大區域,所以比較簡單。

代碼:

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     string str[52];
 9     int n;
10     cin >> n;
11     for (int i = 0; i < n; i++)
12         cin >> str[i];
13     int maxCnt = 0;//保存最大區域的值
14     for (int j = 0; j < n; j++)
15     {
16         int cnt = 1;//臨時保存每一列的最大區域的值
17         for (int i = 1; i < n; i++)
18         {
19             if (str[i][j] == str[i - 1][j])
20             {
21                 cnt++;
22             }
23             else
24             {
25                 maxCnt = max(maxCnt, cnt);
26                 cnt = 1;
27             }
28 
29         }
30         maxCnt = max(maxCnt, cnt);
31     }
32     cout << maxCnt << endl;
33     return 0;
34 }

結果:

?

轉載于:https://www.cnblogs.com/lxt1105/p/6690040.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/138950.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息