1. 程式人生 > >今日頭條2017校招筆試題

今日頭條2017校招筆試題

問題描述:
頭條的2017校招開始了!為了這次校招,我們組織了一個規模巨集大的出題團隊,每個出題人都出了一些有趣的題目,而我們現在想把這些題目組合成若干場考試出來,在選題之前,我們對題目進行了盲審,並定出了每道題的難度系統。一場考試包含3道開放性題目,假設他們的難度從小到大分別為a,b,c,我們希望這3道題能滿足下列條件:
a<=b<=c
b-a<=10
c-b<=10
所有出題人一共出了n道開放性題目。現在我們想把這n道題分佈到若干場考試中(1場或多場,每道題都必須使用且只能用一次),然而由於上述條件的限制,可能有一些考試沒法湊夠3道題,因此出題人就需要多出一些適當難度的題目來讓每場考試都達到要求,然而我們出題已經出得很累了,你能計算出我們最少還需要再出幾道題嗎?
輸入描述:


輸入的第一行包含一個整數n,表示目前已經出好的題目數量。
第二行給出每道題目的難度係數d1,d2,…,dn。
資料範圍:
對於30%的資料,1 ≤ n,di ≤ 5;
對於100%的資料,1 ≤ n ≤ 10^5,1 ≤ di ≤ 100。
在樣例中,一種可行的方案是新增2個難度分別為20和50的題目,這樣可以組合成兩場考試:(20 20 23)和(35,40,50)。
輸出描述:
輸出只包括一行,即所求的答案。
示例1:
輸入:
4
20 35 23 40
輸出:
2

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std; int main() { int number; cin >> number; vector<int> input(number, 0); for (int i = 0; i < number; i++) cin >> input[i]; sort(input.begin(), input.end()); int extra = 0; for (int i = 1; i < input.size(); ++i) { if
(input[i] - input[i - 1] > 10 && i % 3) { input.insert(input.begin()+i, input[i-1]+10); sort(input.begin(), input.end()); ++extra; } } if (input.size() % 3 == 1) { input.insert(input.end(), input[input.size() - 1] + 10); ++extra; input.insert(input.end(), input[input.size() - 1] + 10); sort(input.begin(), input.end()); ++extra; } if (input.size() % 3 == 2) { input.insert(input.end(), input[input.size() - 1] + 10); sort(input.begin(), input.end()); ++extra; } cout << extra << endl; system("pause"); return 0; }

解題思路:
首先使用迴圈將輸入的元素放入向量:

    for (int i = 0; i < number; i++)
        cin >> input[i];

比如輸入為:
8
20 35 23 40 50 45 49 70
然後對向量中的元素進行排序:

sort(input.begin(), input.end());

得到的input為:20 23 35 40 45 49 50 70
新增的元素計算程式為:

for (int i = 1; i < input.size(); ++i)
    {
        if (input[i] - input[i - 1] > 10 && i % 3)
        {
            input.insert(input.begin()+i, input[i-1]+10);
            sort(input.begin(), input.end());
            ++extra;
        }
    }
    if (input.size() % 3 == 1)
    {
        input.insert(input.end(), input[input.size() - 1] + 10);
        ++extra;
        input.insert(input.end(), input[input.size() - 1] + 10);
        sort(input.begin(), input.end());
        ++extra;
    }
    if (input.size() % 3 == 2)
    {
        input.insert(input.end(), input[input.size() - 1] + 10);
        sort(input.begin(), input.end());
        ++extra;
    }

首先,利用for迴圈將不滿足b-a<=10和c-b<=10的元素位置新增一個元素,新增的元素直接為前一個數加10,同時還需要判斷是不是已經構成的三個一組,若是已經構成了三個一組,這第三個和第四個不需要滿足上述條件,所以for迴圈中的判斷語句為:input[i] - input[i - 1] > 10 && i % 3。
後面的

    if (input.size() % 3 == 1)
    {
        input.insert(input.end(), input[input.size() - 1] + 10);
        ++extra;
        input.insert(input.end(), input[input.size() - 1] + 10);
        sort(input.begin(), input.end());
        ++extra;
    }
    if (input.size() % 3 == 2)
    {
        input.insert(input.end(), input[input.size() - 1] + 10);
        sort(input.begin(), input.end());
        ++extra;
    }

作用為:與當前面元素均滿足b-a<=10和c-b<=10,但是可能會使得最終最後一組不滿足三個元素,所以在進行判斷。

相關推薦

今日頭條2017試題

問題描述: 頭條的2017校招開始了!為了這次校招,我們組織了一個規模巨集大的出題團隊,每個出題人都出了一些有趣的題目,而我們現在想把這些題目組合成若干場考試出來,在選題之前,我們對題目進行了盲審,並定出了每道題的難度系統。一場考試包含3道開放性題目,假設他們

2017試題

題目:輸入一個字串從左到右遍歷,如果遇到三個連續相同的子串就將這個子串刪除,並將原串剩下的部分拼接到一起,重複上述過程,直到字串中沒有可以刪除的子串。 eg: 輸入:AAABCCDDDCB AABBBABBBA 輸出:BB

今日頭條2018秋試題(未完待續)

第一題: #include <iostream> #include <vector> #include <string> using namespace std; void helper(const vector<vecto

頭條今日頭條2017真題)1——python解法

題目描述 頭條的2017校招開始了!為了這次校招,我們組織了一個規模巨集大的出題團隊。每個出題人都出了一些有趣的題目,而我們現在想把這些題目組合成若干場考試出來。在選題之前,我們對題目進行了盲審,並定出了每道題的難度係數。一場考試包含3道開放性題目,假設他們的難度從小到大分別為a, b, c,我

2017-08-25阿里試題---菜鳥倉庫

”’ 阿里巴巴校招筆試附加題2菜鳥倉庫貨架編號問題 題目複述: 倉庫編號為0-9整數 以下為一示例: 1| 12| 123| 1234| 12345| ……|1234567891011

網易2017試題 最大的奇約數

題目: 定義函式f(x)為x的最大奇數約數,x為正整數,例如f(44) = 11. 現在給出一個N,需要求出f(1) + f(2) + f(3) + ... + f(N) 例如: N = 7 f(1) + f(2) + f(3) + f(4) + f(5) + f(6) + f(7) = 1 + 1

2017年完美世界試題,從n層大樓往下扔m顆玻璃珠確定珠子破碎的臨界樓層

這道題可以搜尋google扔玻璃珠筆試題以及騰訊2017的校招筆試也有一道這樣的題,不同的是,以上的題中只是用了兩顆玻璃珠,而這裡是m顆玻璃珠; 不過,同樣是扔珠子,所以思路都是一樣,只不過變得更有普

試題編程技巧總結

hid sca 筆試 result div else 總結 class ash 技巧一://統計字符串s1的頻率 String s1 = in.nextLine(); //統計字符串s1的頻率 for (char c1 : s1.toCharAr

1~n的全排列--閱文集團2018試題

put ron class 校招 next() tostring return bsp 輸出格式 題目大意:給定整數n,求出1~n的全排列 示例 輸入:n=3 輸出:[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1] 1 im

2018 CVTE 前端試題整理

簡單的 三欄布局 位置 back 左右 blue color for循環 結果 昨天晚上(7.20)做了CVTE的前端筆試,總共三十道題,28道多選題,2道編程題 。做完了之後覺得自己基礎還是不夠紮實,故在此整理出答案,讓自己能從中得到收獲,同時給日後的同學一些參考。 首先

今日頭條2018演算法方向--手串問題

題目: 作為一個手串藝人,有金主向你訂購了一條包含n個雜色串珠的手串——每個串珠要麼無色,要麼塗了若干種顏色。為了使手串的色彩看起來不那麼單調,金主要求,手串上的任意一種顏色(不包含無色),在任意連續的m個串珠裡至多出現一次(注意這裡手串是一個環形)。手串上的顏色一共有c種。現在按順時針序告訴你

位元組跳動2019屆試題

1.世界盃開幕式會在球場C舉行,球場C的球迷看臺可以容納M*N個球迷。在球場售票完成後,現官方想統計此次開幕式一共有多少個球隊球迷群體,最大的球隊球迷群體有多少人。 經調研發現,球迷群體在選座時有以下特性: 同球隊的球迷群體會選擇相鄰座位,不同球隊的球迷群體會選

位元組跳動2019屆試題

2.為了提高文章質量,每一篇文章(假設全部都是英文)都會有m民編輯進行稽核,每個編輯獨立工作,會把覺得有問題的句子通過下表記錄下來,比如[1,10],1表示病句的第一個字元,10表示病句的最後一個字元。也就是從1到10著10個字元組成的句子,是有問題的。 現在需

思特奇2019試題

描述系統對外提供的所有服務,因此介面中的成員常量和方法都必須是公開(public)型別的,確保外部使用者能訪問它們; 介面僅僅描述系統能做什麼,但不指明如何去做,所以介面中的方法都是抽象(abstract)方法; 介面不涉及和任何具體例項相關的細節,因此介面沒有構造方法,

騰訊試題之小Q的歌單

題目 小Q的歌單 熱度指數:1624 時間限制:1秒 空間限制:32768K 小Q有X首長度為A的不同的歌和Y首長度為B的不同的歌,現在小Q想用這些歌組成一個總長度正好為K的歌單,每首歌最多隻能在歌單中出現一次,在不考慮歌單內歌曲的先後順序的情況下

美團點評試題

美團點評1 1:在網路7層協議中,如果想使用UDP協議達到TCP協議的效果,可以在哪層做文章? 因為UDP要達到TCP的功能就必須實現擁塞控制的功能,而且是在路由之間實現,這個在底層明顯是做不到擁塞控制的,在應用層也是做不到的,因為應用層之間和應用程式掛鉤,一般

阿里java試題——程式碼塊中語句的執行順序

下面是阿里java校招的一道筆試題,程式碼如下: public class HelloA { //構造方法 public HelloA(){ System.out.println("Hello A!父類構造方法"); } //非靜態

貝殼19年試題

題目描述 小智和小春兩個遊戲菜鳥要進行電競搏鬥,小智有X點HP,每次攻擊會使對方丟失A點生命值,每次攻擊完後需要冷卻C秒,小春有Y點HP,每次攻擊會使對方丟失B點生命值,每次攻擊完後需要冷卻D秒,玩家HP小於等於0時便死亡,若小智最終存活,則輸出XIAOZHI,

觸寶科技2018試題

#include <iostream> #include <string> #include <vector> using namespace std; void find(vector<string>& ve,vect

360試題(C++小明買菜)

大致題意: 小明拿n元錢去買菜,一共買x種菜,但是必須要在y種菜裡買一樣最貴的,問小明拿的錢夠不夠買菜。首先輸入n,然後輸入x,y(x<=y)。最後輸入y種菜每種菜的單價。 例: 輸入: 8 3 4 2 1 4 3 輸出: Yes 大致思