2020百度校招C++/PHP方向筆試大題(部分)

前言:本人使用php編程語言編寫

一:  小度幫同事買飲料,每個同事都會告訴小度要喝什麼類型的飲料,店家正好做買一送一活動,每買一瓶任意類型飲料可以贈送同類型飲料一瓶,請問小度至少需要買幾瓶飲料。

1.第一行輸入兩值:a,b。(a代表同事人數,且a>=0。b代表商店一共有多少種類型飲料,0<=b<=1000)(具體限制記不太清,不影響結果)

2.第二行輸入a個值,代表每個同事想要喝的飲料類型。

例:(具體例子記不清,隨便給個)

輸入:

5 3

1 2 2 1 2

輸出:

3

<?php
// 買飲料。

while (fscanf(STDIN, "%d%d", $a, $b) == 2) { 
    fscanf(STDIN, "%[^\n]s", $line);
    //split line to array
    $numbers = explode(" ", trim($line));
    if(count($numbers) == $a && max($numbers) <= $b){
        //將結果數組按值分類計數
        $numbers = array_count_values($numbers);
        $re = 0;
        foreach ($numbers as $number){
            //取進位整數
            $re += ceil($number / 2.0);
        }
        printf("%d\n",$re);
    }
}

 

二:小度所在的隊伍執行任務,路上遇到三岔路口。軍官有過吩咐,遇到三叉路口如果隊伍可以分成兩隊,且兩隊人數差是b人,則分成兩隊向不同的路口繼續走,若隊伍無法按要求分成兩隊,則在此地紮營,問隊伍一共紮了幾處營地。

1.第一行輸入a,b兩個值,a代表隊伍總人數,b代表分隊的人數差。

例:

輸入:

10 2

輸出:

5

說明:          10

                    /    \

                  4       6

                /   \     /  \

              1     3  2    4

                             /   \

                           1     3

<?php
// 三岔路口擺地攤。

while (fscanf(STDIN, "%d%d", $a, $b) == 2) {  
    $re = test($a,$b,0);
    printf("%d\n",$re);
}

function test($a,$b,$c){
    $re = 0;
    //如果隊伍人數少餘(差值+1),直接紮營
    if($a <= $b+1){
        return $c+1;
    }
    //如果隊伍人數減去差值可以被2整除(即可以分成兩隊)就分隊
    if(($a-$b)%2 == 0){
        //遞歸紮營
        $re += test(($a-$b)/2,$b,$c);
        $re += test(($a-$b)/2+$b,$b,$c);
        return $re;
    }else{
        return $c+1;
    }
}

 

三:小度擺放火柴 1-9 九個數字,1 2 3 4 5 6 7 8 9 分別需要使用 2 5 5 4 5 6 3 7 6根火柴,給小度n根火柴,小度能擺出的最大數字是多少(火柴需全部使用完)

1.第一行輸入a,b兩個值,a代表給小度的火柴總數,b代表小度可以擺放的數字個數。

2.第二行輸入b個值,代表小度可以擺放的數字。

例:

輸入:

20 4

3 4 7 8

輸出:

777773

沒寫出來,尬

 

結語:經過這次筆試測試,也是發現了自己很多不足。小題很多是關於數據結構的樹、圖那些,很可惜好久沒複習忘得差不多了。大題最後一個沒寫出來也是有點遺憾。再接再厲吧。

如果你看到了並知道最後一題答案,也歡迎留言。

(題目均根據記憶寫出來,如跟原題目有小差誤也請諒解。任何問題可以留言。)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章