1. 程式人生 > >百度2017秋招筆試程式設計題

百度2017秋招筆試程式設計題

1.[程式設計題] 買帽子

時間限制:1秒
空間限制:32768K

度度熊想去商場買一頂帽子,商場裡有N頂帽子,有些帽子的價格可能相同。度度熊想買一頂價格第三便宜的帽子,問第三便宜的帽子價格是多少?

輸入描述:
首先輸入一個正整數N(N <= 50),接下來輸入N個數表示每頂帽子的價格(價格均是正整數,且小於等於1000)

輸出描述:
如果存在第三便宜的帽子,請輸出這個價格是多少,否則輸出-1

輸入例子1:
10
10 10 10 10 20 20 30 30 40 40

輸出例子1:
30

#include <iostream>
using namespace std;
int
a[51]; void quicksort(int left, int right) { int i,j,t,key; if(left > right) return; key = a[left]; i = left; j = right; while(i != j) { while(a[j] >= key && i < j) --j; while(a[i] <= key && i < j) ++i; if
(i<j) { t = a[i]; a[i] = a[j]; a[j] = t; } } a[left] = a[i]; a[i] = key; quicksort(left, i-1); quicksort(i+1, right); return; } int main() { int N; cin >> N; for(int i = 0; i < N; ++i) { cin >>a[i]; } quicksort(0
, N-1); int tmp = 2; for(int i = 0; i+1 < N; ++i) { if(a[i] < a[i+1]) --tmp; if(tmp == 0) { cout << a[i+1]; return 0; } } cout << -1; return 0; }

2.[程式設計題] 度度熊回家

時間限制:1秒
空間限制:32768K

一個數軸上共有N個點,第一個點的座標是度度熊現在位置,第N-1個點是度度熊的家。現在他需要依次的從0號座標走到N-1號座標。
但是除了0號座標和N-1號座標,他可以在其餘的N-2個座標中選出一個點,並直接將這個點忽略掉,問度度熊回家至少走多少距離?

輸入描述:
輸入一個正整數N, N <= 50。
接下來N個整數表示座標,正數表示X軸的正方向,負數表示X軸的負方向。絕對值小於等於100

輸出描述:
輸出一個整數表示度度熊最少需要走的距離。

輸入例子1:
4
1 4 -1 3

輸出例子1:
4

#include<iostream>
#include<algorithm>
#include<cmath>
#include<limits.h>
using namespace std;
int main() {
    int N;
    cin >> N;
    vector<int> num(N);
    int total = 0;
    for(int i = 0; i < N; ++i) {
        cin >> num[i];
    }
    for(int i=0; i+1 < N; ++i) {
        total += abs(num[i+1]-num[i]);
    }
    int mx = 0;
    for(int i = 1; i+1 < N; ++i) {
        mx = max(mx, abs(num[i] - num[i-1]) + abs(num[i+1] - num[i]) - abs(num[i+1] - num[i-1]));
    }
    cout<<total-mx;
    return 0;
}

3.[程式設計題] 尋找三角形

時間限制:1秒
空間限制:32768K

三維空間中有N個點,每個點可能是三種顏色的其中之一,三種顏色分別是紅綠藍,分別用’R’, ‘G’, ‘B’表示。
現在要找出三個點,並組成一個三角形,使得這個三角形的面積最大。
但是三角形必須滿足:三個點的顏色要麼全部相同,要麼全部不同。

輸入描述:
首先輸入一個正整數N三維座標系內的點的個數.(N <= 50)
接下來N行,每一行輸入 c x y z,c為’R’, ‘G’, ‘B’ 的其中一個。x,y,z是該點的座標。(座標均是0到999之間的整數)

輸出描述:
輸出一個數表示最大的三角形面積,保留5位小數。

輸入例子1:
5
R 0 0 0
R 0 4 0
R 0 0 3
G 92 14 7
G 12 16 8

輸出例子1:
6.00000

#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
using namespace std;

double distance(vector<int> p1, vector<int> p2) {
    int a1 = p1[0] - p2[0];
    int a2 = p1[1] - p2[1];
    int a3 = p1[2] - p2[2];
    return sqrt((1.0*a1*a1) + (1.0*a2*a2) + (1.0*a3*a3));
}

double help(vector<int> p1, vector<int> p2, vector<int> p3) {
    double a, b, c, p;
    a = distance(p1, p2);
    b = distance(p1, p3);
    c = distance(p2, p3);
    p = (a+b+c)/2;
    return sqrt(1.0*p*(p-a)*(p-b)*(p-c));
}

int main() {
    int N, zero = 1;
    cin >> N;
    vector<vector<int> > num(N, vector<int>(3));
    vector<char> idx(N);
    double res = 0;
    for(int m = 0; m < N; ++m) {
        cin>>idx[m]>>num[m][0]>>num[m][1]>>num[m][2];
    }
    for(int i = 0; i < N; ++i) {
        for(int j = i+1; j < N; ++j) {
            for(int k = j+1; k < N; ++k) {
                if( (idx[i]!=idx[j] && idx[i]!=idx[k] && idx[j]!=idx[k]) || (idx[i]==idx[j] && idx[j]==idx[k]) ) {
                    if(zero) {
                        res = help(num[i], num[j], num[k]);
                        zero = 0;
                    }
                    else {
                        res = max(res, help(num[i], num[j], num[k]));
                    }
                }
            }
        }
    }
    cout<<setiosflags(ios::fixed)<<setprecision(5)<<res<<endl;
    return 0;
}

4.[程式設計題] 有趣的排序

時間限制:1秒
空間限制:32768K

度度熊有一個N個數的陣列,他想將陣列從小到大 排好序,但是萌萌的度度熊只會下面這個操作:
任取陣列中的一個數然後將它放置在陣列的最後一個位置。
問最少操作多少次可以使得陣列從小到大有序?

輸入描述:
首先輸入一個正整數N,接下來的一行輸入N個整數。(N <= 50, 每個數的絕對值小於等於1000)

輸出描述:
輸出一個整數表示最少的操作次數。

輸入例子1:
4
19 7 8 25

輸出例子1:
2

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
    int n;
    cin>>n;
    vector<int> num(n), numcp(n);
    for(int i=0; i<n; ++i) {
        cin>>num[i];
    }
    numcp = num;
    sort(numcp.begin(), numcp.end());
    int idx, last, ans = 0;
    last = find(num.begin(), num.end(), numcp[0]) - num.begin();
    for(int i=1; i<n; ++i) {
        idx = find(num.begin(), num.end(), numcp[i]) - num.begin();
        if(idx>last) {
            last = idx;
        } else {
            ans = n - i;
            break;
        }
    }
    cout<<ans;
    return 0;
}

5.[程式設計題] 不等式數列

時間限制:1秒
空間限制:32768K

度度熊最近對全排列特別感興趣,對於1到n的一個排列,度度熊發現可以在中間根據大小關係插入合適的大於和小於符號(即 ‘>’ 和 ‘<’ )使其成為一個合法的不等式數列。但是現在度度熊手中只有k個小於符號即(‘<”)和n-k-1個大於符號(即’>’),度度熊想知道對於1至n任意的排列中有多少個排列可以使用這些符號使其為合法的不等式數列。

輸入描述:
輸入包括一行,包含兩個整數n和k(k < n ≤ 1000)

輸出描述:
輸出滿足條件的排列數,答案對2017取模。

輸入例子1:
5 2

輸出例子1:
66

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
    int n,k;
    cin>>n>>k;
    int dp[1001][1001] = {0};
    dp[1][0] = 1;
    dp[2][0] = 1;
    dp[2][1] = 1;
    for(int i = 3; i <= n; ++i) {
        for(int j = 0; j <= k; ++j) {
            dp[i][j] = (dp[i-1][j-1]*(i-j) + (dp[i-1][j]*(j+1))) % 2017;
        }
    }
    cout<<dp[n][k];
    return 0;
}

dp[i][j] = (dp[i - 1][j - 1] * (i - j) + dp[i - 1][j] * (j + 1)) % 2017;
dp[i][j]表示有i個數字及j個小於號所能組成的數量(大於號數量當然是i - j - 1次,後面需要使用)
而加入第i + 1個數字時,分以下四種情況:
1.如果將i+1插入當前序列的開頭,即有了1<2,加入後成為3>1<2,會發現等於同時加入了一個大於號!(此時可以無視1與2之間的關係,因為i+1>i)
2.如果將i+1插入當前序列末尾,即1<2變成了 1<2<3,會發現等於同時加入了一個小於號! (此時可以無視1與2之間的關係,因為i+1>i)
3.如果將i+1加入一個小於號之間,即已經有 1<2了,向中間加入3,會發現變成了1<3>2,等於同時加入了一個大於號!
4.如果將i+1加入一個大於號中間,即有了2>1,變成了2<3>1,等於同時加入了一個小於號!
綜上所述,dp[i][j]等於以上四種情況之和:
dp[i - 1][j] //將i加在開頭等於加入一個大於號,即要求i-1個數時已經有了j個小於號
dp[i - 1][j - 1] //將i加在末尾等於加入一個小於號,即要求i-1個數時已經有了j-1個小於號
dp[i - 1][j] * j //將i加在任意一個小於號之間,等於加入了一個大於號;即要求i-1個數時已經有了j個小於號,每個小於 號都可以進行這樣的一次插入
dp[i - 1][j - 1] * (i- j - 1) //將i載入任意一個大於號之間,等於加入了一個小於號;即要求i-1個數時有了j-1個小於號,而此時共有
(i - 1) - (j - 1)- 1個大於號,每個大於號都要進行一次這樣的操作
合併同類項即為
dp[i][j] = (dp[i - 1][j - 1] * (i - j) + dp[i - 1][j] * (j + 1))
最後要記得取模.

相關推薦

2017筆試程式設計

1.[程式設計題] 買帽子 時間限制:1秒 空間限制:32768K 度度熊想去商場買一頂帽子,商場裡有N頂帽子,有些帽子的價格可能相同。度度熊想買一頂價格第三便宜的帽子,問第三便宜的帽子價格是多少? 輸入描述: 首先輸入一個正整數N(N <=

2017筆試程式設計集合

百度2017春招筆試真題程式設計題集合 百度2017春招筆試真題程式設計題集合 買帽子 資料結構 度度熊回家 貪心 尋找三角形 暴力 有趣的排序 貪心 逆向思維 不等式數

買帽子——2017筆試程式設計(一)

題目描述: 度度熊想去商場買一頂帽子,商場裡有N頂帽子,有些帽子的價格可能相同。度度熊想買一頂價格第三便宜的帽子,問第三便宜的帽子價格是多少? 輸入描述: 首先輸入一個正整數N(N

2017筆試編程集合之尋找三角形

import math 可能 表示 tint blog 整數 angle printf 題目描述 三維空間中有N個點,每個點可能是三種顏色的其中之一,三種顏色分別是紅綠藍,分別用‘R‘, ‘G‘, ‘B‘表示。 現在要找出三個點,並組成一個三角形,使得這個三角形的面積最大。

科大訊飛2017筆試程式設計

題目描述:隊友爭吵 思路:   感覺像是找規律題:因為最左的一個LL、最右的一個R永遠不會被消去,所以我們需要做的就是最後一個L的位置減去第一個R的位置就是消去的人數。 程式碼實現: import java.util.Scanner; public clas

騰訊2017筆試程式設計--素數對

給定一個正整數,編寫程式計算有多少對質數的和等於輸入的這個正整數,並輸出結果。輸入值小於1000。 如,輸入為10, 程式應該輸出結果為2。(共有兩對質數的和為10,分別為(5,5),(3,7)) 輸入描述: 輸入包括一個整數n,(3 ≤ n <

騰訊2017筆試程式設計--編碼

假定一種編碼的編碼範圍是a ~ y的25個字母,從1位到4位的編碼,如果我們把該編碼按字典序排序,形成一個數組如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyy

騰訊2017筆試程式設計

1、[程式設計題] 編碼 假定一種編碼的編碼範圍是a ~ y的25個字母,從1位到4位的編碼,如果我們把該編碼按字典序排序,形成一個數組如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab,

騰訊2017筆試程式設計(三)---素數對

騰訊2017秋招筆試程式設計題(三)—素數對 時間限制:1秒 空間限制:32768K 給定一個正整數,編寫程式計算有多少對質數的和等於輸入的這個正整數,並輸出結果。輸入值小於1000。 如,輸

騰訊2017筆試程式設計:素數對 [python]

''' [程式設計題] 素數對 時間限制:1秒 空間限制:32768K 給定一個正整數,編寫程式計算有多少對質數的和等於輸入的這個正整數,並輸出結果。輸入值小於1000。 如,輸入為10, 程式應該輸

敏感詞(2017

題目描述 大部分論壇、網站等,為了方便管理,都進行了關於敏感詞的設定。 在多數網站,敏感詞一般是指帶有敏感政治傾向、暴力傾向、不健康色彩的詞或不文明語,也有一些網站根據自身實際情況,設定一些只適用於本網站的特殊敏感詞。比如,當你發貼的時候帶有某些事先設定的詞時,這個貼是不能發出的

相似串(2017

相似串(百度2017秋招真題) 題目描述 S和T是兩個字串(它們只由小寫字母構成),定義S與T相似當且僅當: S 和 T 長度相同。 對於任意兩個位置 i 和 j ,如果 Si 和 Sj 相同,那麼 Ti 和 Tj 相同;如果 Si 和 Sj 不同,那麼 Ti

# Unix 時間戳(2017

Unix 時間戳(百度2017秋招真題) 題目描述 Unix 時間戳(Unix timestamp),或稱Unix時間(Unix time)、POSIX 時間(POSIX time),是一種時間表示方式,定義為從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數

顏色反轉(2017

顏色反轉(百度2017秋招真題) 題目描述 在 Web 開發中,通常使用 16 進位制 RGB 表示一個顏色。 例 如 #0000FF 表示藍色,#FF7F50 表示珊瑚紅。在這道題中,我們要求把給定的一種顏色取反,方法是把 RGB 的每個位轉換成十進位制 rgb,再用 25

2017滴滴筆試程式設計-求連續子陣列的最大和

題目:輸入一個整型陣列,數組裡有正數也有負數,陣列中的一個或者連續多個整陣列成一個子陣列,求所有子陣列的和的最大值,要求時間複雜度為O(n)。 例如:輸入的陣列為{1,-2,3,10,-4,7,2,

滴滴出行2017筆試-程式設計彙總

滴滴的題考經典演算法比較多啊,兩道經典動態規劃,一道經典搜尋題,一道程式設計之美原題(聽別人說是程式設計之美上的,自己並不清楚),兩道水題. 題目連結:[點這兒]. 第一題: 題目:連續最大和 求陣列的連續最大和,太經典了,有dp的做法,也

小米 筆試 程式設計 句子反轉

題目 句子反轉 時間限制:1秒 空間限制:32768K 熱度指數:55050 演算法知識視訊講解 校招時部分企業筆試將禁止程式設計題跳出頁面,為提前適應,練習時請使用線上自測,而非本地IDE。 題目描述 給定一個句子(只包含字母和空格), 將句子中的單詞位置反

美團點評2017筆試-運維工程師B

1、資料庫:以下哪項不是HASH索引的特徵? 正確答案: C A MySQL不能確定在兩個值之間大約有多少行 B 不能使用hash索引來加速ORDER BY操作 C 只用於使用“>”或“<”操作符的比較 D 只能使用整個關鍵字來搜尋一行 2、使用者J

2019網易筆試 程式設計:俄羅斯方塊

題目:俄羅斯方塊 小易有一個古老的遊戲機,上面有著經典的遊戲俄羅斯方塊。因為它比較古老,所以規則和一般的俄羅斯方塊不同。 熒幕上一共有 n 列,每次都會有一個 1 x 1 的方塊隨機落下,在同一列中,後落下的方塊會疊在先前的方塊之上,當一整行方塊都被

京東2017筆試程式設計iOS開發工程師

題目過幾天更新,先粘程式碼。 異或運算。 #include <iostream> #include <cstdio> usingnamespacestd; int main() { int n; char a[21],b[21]